如何迅速停止一个线程???(33分)

  • 主题发起人 主题发起人 mazheng
  • 开始时间 开始时间
M

mazheng

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:如果我要在10秒钟之内,要 XYZThread.Terminate;
窗体就没有反映了,如何处理??
procedure Txyz.Execute;
begin

while not Terminateddo

begin

try
Sleep(10000);//休眠10秒钟
DisplayMemo;
except
sl.Add(DateTimeToStr(Now)+'--线程错误');
sl.SaveToFile('c:/测试.txt');
end;

end;

end;
 
Windows.TerminateThread(XYZThread.Handle);
 
demo := Txyz.create(false)
demo.terminate;
demo.waitfor;
 
API函数:TerminateThread()最快最暴力!我最近刚好遇到这个问题,经过测试,用此函数不会出错。
if Assigned(aThread) then
begin
TerminateThread(aThread.Handle,0);
//用API函数停止线程
WaitForSingleObject(aThread.Handle,INFINITE);
//等待线程结束
//aThread.Terminate;
//停止线程
//aThread.WaitFor;
//等线程结束
FreeAndNil(aThread);
end;
 
你可以考滤把Sleep函数换掉
 
不要使用 Sleep 而使用 windows 的 event 机制,利用 waitforsingleobject 等待 10s 超时,退出时设置 event 即可中断这 10s 的等待,实现马上退出。
 
把 Sleep(10000);//休眠10秒钟
用循环来做, sleep(10), 循环里再加判断.
 
看看这篇笔记,完全满足你的需求。
http://www.delphibbs.com/keylife/iblog_show.asp?xid=29856
另外,如果你用了我上面的笔记,而且程序里面需要创建超过16个定时器的多线程,那么还需要修改,需要将定时器的设置改成createwaitabletimer这个来做。
 
用TerminateThread()函数可能会导致有些变量没有被释放,尽量不要使用
 
后退
顶部