L
logpie
Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TTestThread.Execute ;
begin
FLock.Enter ;
hEvent:=CreateEvent(nil,True,False,nil);
if intRun=1 then
SetEvent(hEvent) else
resetEvent(hEvent);
if WaitForSingleobject(hEvent,INFINITE)=WAIT_OBJECT_0 then
Synchronize(ShowMsg);
//ResetEvent(hEvent);
intRun:=0;
FLock.Leave ;
end;
procedure TTestThread.ShowMsg ;
begin
Form1.Memo1.Lines.Add(FData);
end;
intRun,hEvent均是TTestThread的私有成员
线程初始时处于不发信号的状态并加入线程池中
通过TTestThread(ThreadPooler.FActiveList.Items).intRun:=1;
来设置线程池内线程的发信号状态
问题1:照理该线程处于发信号状态时TTestThread.Execute因改继续往下走啊,也就是MEMO1上显示FDATA,而该段程序却并非如此,不知为何。
问题2:可以通过再次CREATE执行EXECUTE,但这样的效率很低,速度慢了很多,请问有什么办法可以不通过再次CREATE而执行EXECUTE(此时处于发信号状态),线程创建时是inherited Create(false), 所以也不能用resume.
谢谢各位了啊!
begin
FLock.Enter ;
hEvent:=CreateEvent(nil,True,False,nil);
if intRun=1 then
SetEvent(hEvent) else
resetEvent(hEvent);
if WaitForSingleobject(hEvent,INFINITE)=WAIT_OBJECT_0 then
Synchronize(ShowMsg);
//ResetEvent(hEvent);
intRun:=0;
FLock.Leave ;
end;
procedure TTestThread.ShowMsg ;
begin
Form1.Memo1.Lines.Add(FData);
end;
intRun,hEvent均是TTestThread的私有成员
线程初始时处于不发信号的状态并加入线程池中
通过TTestThread(ThreadPooler.FActiveList.Items).intRun:=1;
来设置线程池内线程的发信号状态
问题1:照理该线程处于发信号状态时TTestThread.Execute因改继续往下走啊,也就是MEMO1上显示FDATA,而该段程序却并非如此,不知为何。
问题2:可以通过再次CREATE执行EXECUTE,但这样的效率很低,速度慢了很多,请问有什么办法可以不通过再次CREATE而执行EXECUTE(此时处于发信号状态),线程创建时是inherited Create(false), 所以也不能用resume.
谢谢各位了啊!