Тема: AHK: странности в работе OnMessage() - как лечить?
Ранее я уже создавал тему про передачу информации из одного скрипта в другой. В принципе все получилось и работает, но сама функция OnMessage работает странно, мне даже не удалось найти никакого объяснения на форумах.
В третьем параметре MaxThreads я установил 100, чтобы не терять сообщения. Далее функция OnMessage вызывает функцию по назначению и она начинает свою работу. Однако если в исполняемой функции сделать задержку, начинается самое интересное.
Если, например, задержка стоит в 30 секунд, и во время выполнения этой задержки OnMessage получит еще одно такое же сообщение, то задержка начнется с начала. То есть если прошло уже 10 секунд, после второго сообщения пройдет еще 30, после этого исполняемая функция завершится мгновенно два раза подряд.
Если каждые 10 секунд (вплоть до 29) отправлять новое сообщение, скрипт будет ждать бесконечно. Как только последнее сообщение подождет свои 30 секунд, скрипт отправит сразу все ответы, которые он должен был отправить до этого.
-
Я разделял потоки, как раз чтобы выполнять такие задержки. Однако такая проблема ломает всю суть, а в теории бот даже можно сломать, спровоцировав вечную задержку. Так как работает эта функция и как можно вылечить это?
Привожу код скрипта получения и обработки сообщений:
OnMessage(0x4a, "tgupdates", 100)
tgupdates(wParam, lParam)
{
StringAddress := NumGet(lParam + 2*A_PtrSize)
CopyOfData := StrGet(StringAddress)
tg := ObjFromStr(CopyOfData)
text := tg.message.text
from_id := tg.message.from.id
if ( text != "" )
{
if ( text = "Hello" )
{
sleep, 5000
SendMessage("You too", from_id, 0)
}
else if ( text = "Bye" )
{
sleep, 10000
SendMessage("See you", from_id, 0)
}
}
}