![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Всем привет. Возникла такая проблемка. Как реализовать задержку между кодом программы без применения sleep().
Код:
procedure dvizhok(); delay(10000); keybd_event(1,29,0,0); delay(100); setcursorpos(812,560); delay(100); mouse_event(mouseeventf_move,1,0,0,0); delay(100); end; Код:
procedure Delay (Milliseconds: Integer); var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWord(Milliseconds); while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; Milliseconds := Tick - GetTickcount; if Application.Terminated then Exit; end; finally CloseHandle(Event); end;end; |
|
#2
|
||||
|
||||
|
Сделать этот код в отдельном потоке и там смело применять Sleep. И пока поток выполняется, не запускать второй его копии.
|
|
#3
|
||||
|
||||
|
Как мне дождатся завершения потока?
|
|
#4
|
||||
|
||||
|
А его ещё и дожидаться надо? Вообще флаг Terminated вроде, но не проще тогда код, который после завершения, в конец потока дописать?..
|
|
#5
|
||||
|
||||
|
По сегоднешнему поиску по форуму на счет флага terminated это приостановка потока.
Цитата:
|
|
#6
|
||||
|
||||
|
Что должно происходить после завершения потока?
|
|
#7
|
|||
|
|||
|
WaitForSingleObject
|