Что нового

как отобразить остаток времени в функции Sleep

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
подскажите возможно ли визуально отобразить оставшееся время до конца паузы если используется команда Sleep с большим интервалом задержки к примеру (20000) например отобразить в заголовке или в статусной панели?
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
general66
ИМХО, только используя
Код:
TimerInit()
TimerDiff()

и проверяя в цикле
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
general66,
Можно попробовать сделать так.
Код:
$iSt = TimerInit()
While 1
	_Sleep(20000)
	ExitLoop
WEnd
ConsoleWrite(TimerDiff($iSt) & @LF)


Func _Sleep($i_Sleep, $nID = 0);или Handle
	Local $i_Start, $s_Time, $i_Start_UpDate

	$i_Sleep = Abs(Int($i_Sleep))
	$i_Start = TimerInit()
	While TimerDiff($i_Start) <= $i_Sleep
		If TimerDiff($i_Start_UpDate) >= 1000 Then
			$s_Time = _Time_From_Ticks($i_Sleep - TimerDiff($i_Start))
			If $nID > 0 Then
				GUICtrlSetData($nID, $s_Time); или другая функция
			Else
				ToolTip($s_Time, 0, 0)
			EndIf
			$i_Start_UpDate = TimerInit()
		EndIf
		Sleep(5)
	WEnd
EndFunc   ;==>_Sleep

Func _Time_From_Ticks($i_Ticks)
	Local $i_Hours, $i_Mins, $i_Secs, $s_Format = '%02d:%02d'

	$i_Ticks = Abs(Int($i_Ticks))
	$i_Ticks = Int($i_Ticks / 1000)
	$i_Hours = Int($i_Ticks / 3600)
	$i_Ticks = Mod($i_Ticks, 3600)
	$i_Mins = Int($i_Ticks / 60)
	$i_Secs = Mod($i_Ticks, 60)
	If $i_Hours Then
		Return StringFormat($s_Format & ':%02d', $i_Hours, $i_Mins, $i_Secs)
	Else
		Return StringFormat($s_Format, $i_Mins, $i_Secs)
	EndIf
EndFunc   ;==>_Time_From_Ticks

Или так.
Код:
#include <Timers.au3>

$iSleep = 20000
$iStart = TimerInit()
$iTimer = _Timer_SetTimer(0, 1000, '_Update')
Sleep($iSleep)
ConsoleWrite(TimerDiff($iStart) & @LF)
_Timer_KillTimer(0, $iTimer)


Func _Update($hWnd, $Msg, $iIDTimer, $dwTime)
	ToolTip(_Time_From_Ticks($iSleep - TimerDiff($iStart)), 0, 0)
EndFunc   ;==>_Update

Func _Time_From_Ticks($i_Ticks)
	Local $i_Hours, $i_Mins, $i_Secs, $s_Format = '%02d:%02d'

	$i_Ticks = Abs(Int($i_Ticks))
	$i_Ticks = Int($i_Ticks / 1000)
	$i_Hours = Int($i_Ticks / 3600)
	$i_Ticks = Mod($i_Ticks, 3600)
	$i_Mins = Int($i_Ticks / 60)
	$i_Secs = Mod($i_Ticks, 60)
	If $i_Hours Then
		Return StringFormat($s_Format & ':%02d', $i_Hours, $i_Mins, $i_Secs)
	Else
		Return StringFormat($s_Format, $i_Mins, $i_Secs)
	EndIf
EndFunc   ;==>_Time_From_Ticks
 
Верх