线程程序无法保证每次都有效关闭?(0分)

W

wksdgy

Unregistered / Unconfirmed
GUEST, unregistred user!
程序中有一个线程实时运行,线程中有判断语句,一但terminated=true便退出线程,在我关闭主程序的ONCLOSE事件中,写有判断语句如下:
dd //是线程,创建时freeonterminate已设置为true;在Execute过程中有Synchronize同步。
-------------
dd.Terminate;
j:=0;
repeat
if WaitForSingleObject(handle,2000)=WAIT_FAILED then

j:=1;
//表示线程已正常退出
i:=i+1;
application.ProcessMessages;
sleep(10);
until (j>0);
-------
因为有Synchronize同步,所以不能用WaitForSingleObject(dd.handle,INFINITE);
只有每2秒循环判断dd.HANDLE的状态,但是这种方式有时候退出主程序时会保证线程
正常退出,有时候主程序不能退出处于停滞状态,我怀疑是线程没有正常退出,但又不
知道怎么去解决这种问题,望大侠们帮帮忙,谢谢了!
 
怎么没人帮帮我啊,谢谢大家了
 
用SendMessage来同步。
 
能说的详细点么?
 
退出时直接去杀线程不可以吗?
procedure TThead.Kill;
begin
Terminate;
//等待线程结束,若不结束,强行杀掉线程
if Windows.WaitForSingleObject(Handle, 1000) = WAIT_TIMEOUT then
begin
Windows.TerminateThread(Handle, 1);
PostFinishedMsg;
//此处有可能需要。。。。
end;
end;

procedure TThead.PostFinishedMsg;
begin
PostMsg(MYMSG_FINISHED, 0, 0);
end;

MYMSG_FINISHED = Messages.WM_APP + 100;
procedure Message_Finished(var Message: TMessage);
message MYMSG_FINISHED;
procedure TCtrl.Message_Finished(var Message: TMessage);
begin
if FThread = nil then
exit;
try
Windows.WaitForSingleObject(FThread.Handle, Windows.INFINITE);
finally
FreeAndNil(FThread);
end;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
顶部