Что нового

[Автоматизация] Вызов функции только через определённый промежуток времени

SUN-CHA

Новичок
Сообщения
8
Репутация
2
Добрый день!

Возник такой вопрос:

Как запустить функцию на исполнение по истечению определённого промежутка времени.
Мне посоветовали AdlibRegister. В принципе он справляется со своей задачей, но мне нужно, что бы AdlibRegister срабатывал в определённой функции, а не просто в теле программы после её запуска.

Код:
#include <GUIConstants.au3>

Global $n=1

AdlibRegister ( "xxx",  2000 )

While 1
	i()
	ToolTip($n)
WEnd

func xxx()
	MsgBox(0,'test','Работает',10)
EndFunc

func i()	
              $n=$n+1
	Sleep(500)
EndFunc

Код:
#include <GUIConstants.au3>

Global $n=1
While 1
	i()
	ToolTip($n)
WEnd

func xxx()
	MsgBox(0,'test','Работает',10)
EndFunc

func i()	
             AdlibRegister ( "xxx",  2000 )
              $n=$n+1
	Sleep(500)
EndFunc

Данная команда не подходит если нужно в определённом месте скрипта остановить его, выполнить функцию и продолжить скрипт.

Возможно есть какие то альтернативы?
Пробовал использовать счётчики, но ни как не придумаю как сделать счётчик времени?!
Я себе уже голову сломал :(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
SUN-CHA,
Попробуйте так.
Код:
$iCount = 0
$iTimeOut = 5000 ; 5 sec
HotKeySet('{Esc}', '_Exit')

_My_Func()
$iStart = TimerInit()
While 1
	If TimerDiff($iStart) > $iTimeOut Then
		ConsoleWrite(StringFormat('прошло %.1f сек', TimerDiff($iStart) / 1000) & @LF)
		_My_Func()
		$iStart = TimerInit()
	EndIf
	Sleep(50)
WEnd

Func _My_Func()
	$iCount += 1
	MsgBox(64, 'Info', '_My_Func ' & $iCount)
EndFunc   ;==>_My_Func

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
S

SUN-CHA

Новичок
Сообщения
8
Репутация
2
Супер!

TimerDiff - это то что нужно! :laugh:
 
Верх