Что нового

Выполнение одной и той же функции во время sleep'а

SHoCK13666

Новичок
Сообщения
108
Репутация
0
Есть некий скрипт. В нём есть функция sleep на 1 час, 59 минут и 55 сек.
Параллельно с со sleep'ом, надо чтобы скрипт выполнял одно и тоже действие. Для этого использую AdlibRegister.
Вопрос: будет ли AdlibRegister "затормаживать" скрипт?
Мне нужно, чтобы sleep выполнялся именно это время и не секунды больше.
 

joiner

Модератор
Локальный модератор
Сообщения
3,401
Репутация
596
SHoCK13666 [?]
Вопрос: будет ли AdlibRegister "затормаживать" скрипт?
да. параллельно выполнять что либо можно только разделив скрипт на два и создав между ними канал общения.
 
Автор
S

SHoCK13666

Новичок
Сообщения
108
Репутация
0
joiner
А есть какие-нибудь варианты сделать это в одном скрипте?
 

joiner

Модератор
Локальный модератор
Сообщения
3,401
Репутация
596
нет. из за отсутствия многопоточности в языке.
пробуй решать свои задачи по другому. если покажешь весь код и опишешь что нужно делать, то , возможно, найдет другой вариант
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
SHoCK13666 [?]
Есть некий скрипт. В нём есть функция sleep на 1 час, 59 минут и 55 сек.
ИМХО, проще проверять этот временной промежуток через TimerInit и TimerDiff.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
964
SHoCK13666 [?]
Вопрос: будет ли AdlibRegister "затормаживать" скрипт?
Нет.
Скрипт будет спать под действием оператора Sleep, а функция AdlibRegister будет работать.
Здесь важно одно, соблюдать временные интервалы, так как AdlibRegister это НЕ параллельный процесс (поток)!!!

Это легко проверить, если в примере ниже раскомментировать в функции _Msg строку MsgBox а ConsoleWrite закомментировать.
Код:
AdlibRegister('_Msg', 1000)
ConsoleWrite(StringFormat('!AdlibRegister: -> (TimeDiff %s)\n', 'Ok'))

$t = TimerInit()
ConsoleWrite(StringFormat('!TimerInit: -> %s\n', 'Ok'))

ConsoleWrite(StringFormat('!Start Sleep: -> (TimeDiff %d)\n', TimerDiff($t)/1000))
Sleep(8000)
ConsoleWrite(StringFormat('!End Sleep: -> (TimeDiff %d)\n', TimerDiff($t)/1000))

AdlibUnRegister('_Msg')
ConsoleWrite(StringFormat('!AdlibUnRegister: -> (TimeDiff %s)\n', 'Ok'))

Func _Msg()
	;MsgBox(0, @ScriptName, StringFormat('!_Msg running: -> (TimeDiff %d)\n', TimerDiff($t)/1000), 1)
	ConsoleWrite(StringFormat('!_Msg running: -> (TimeDiff %d)\n', TimerDiff($t)/1000))
EndFunc
 
Верх