|
|
#1
|
|||
|
|||
пауза в потоке
драсте подскажите как сделать шоб поток в определеном месте остановился
а в нужный момент команда с основнова процеса сняла этот поток с паузы |
#2
|
||||
|
||||
CreateEvent, WaitForSingleObject.
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
а можно по подробнее про WaitForSingleObject
потому што у меня в отдельном потоке уже стоит эта команда там пауза вызвана через SetWaitableTimer а здесь оно должно остановиться и ждать событий компа |
#4
|
||||
|
||||
Oops, про SetEvent забыл упомянуть.
Пишу программы за еду. __________________ |
#5
|
||||
|
||||
Цитата:
Код:
TMonitor.Wait() — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#6
|
||||
|
||||
На форме 2 Button и Memo:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TWaitThread = class(TThread) private FMsg: String; procedure Updt; protected procedure Execute; override; end; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; HEvent: THandle; implementation {$R *.dfm} { TWaitThread } procedure TWaitThread.Updt; begin Form1.Memo1.Lines.Add(FMsg); end; procedure TWaitThread.Execute; begin FMsg:='Execute start'; Synchronize(Updt); FMsg:='WaitForSingleObject'; Synchronize(Updt); case WaitForSingleObject(HEvent, 5000) of (* INFINITE *) WAIT_OBJECT_0: begin FMsg:='WAIT_OBJECT_0'; Synchronize(Updt); end; WAIT_TIMEOUT: begin FMsg:='WAIT_TIMEOUT'; Synchronize(Updt); end; end; FMsg:='Execute stop'+sLineBreak; Synchronize(Updt); end; { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin with TWaitThread.Create(True) do begin FreeOnTerminate:=True; Resume; end; end; procedure TForm1.Button2Click(Sender: TObject); begin SetEvent(HEvent); end; initialization HEvent:=CreateEvent(nil, False, False, nil); finalization CloseHandle(HEvent); end. Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
SKIPtr (11.02.2017)
|
#7
|
|||
|
|||
Цитата:
|
#8
|
|||
|
|||
попробывал
срабатывает нормально но тут когда такой вопрос задал мне дали почти похожий совет только они советовали вместо Код:
SetEvent(HEvent); там советовали Код:
PulseEvent(FEvnt); оба варианта работают а в чем разница этих команд |