![]() |
|
|
|
|
#1
|
|||
|
|||
|
драсте подскажите как сделать шоб поток в определеном месте остановился
а в нужный момент команда с основнова процеса сняла этот поток с паузы |
|
#2
|
||||
|
||||
|
CreateEvent, WaitForSingleObject.
|
|
#3
|
|||
|
|||
|
а можно по подробнее про WaitForSingleObject
потому што у меня в отдельном потоке уже стоит эта команда там пауза вызвана через SetWaitableTimer а здесь оно должно остановиться и ждать событий компа |
|
#4
|
||||
|
||||
|
Oops, про SetEvent забыл упомянуть.
|
|
#5
|
||||
|
||||
|
Цитата:
Код:
TMonitor.Wait() |
|
#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); оба варианта работают а в чем разница этих команд |