如何终止线程(30分)

  • 主题发起人 主题发起人 vai
  • 开始时间 开始时间
V

vai

Unregistered / Unconfirmed
GUEST, unregistred user!
用API
的terminatethread 好吗?
 
看你用什么了,如果你用Delphi的TThread对象(这也是Delphi推荐的!),那么
你可以用方法TThread.Terminate来终止线程。
 
在WinAPI中说:
TerminateThread is a dangerous function that should only be used in
the most extreme cases.
TerminateThread 是一个危险的函数,只应该在最有必要时使用。
线程应该有该线程本身结束。如果线程是用Delphi的TThread对象封装的,应该使用
它的Terminate;方法。并在线程的Execute方法中这样实现:
begin
if Terminated then
exit;
.....
end;
 
使用TerminateThread的危险在于可能导致这个线程中引用的DLL不能被正确释放
 
那该如何终止线程?
我不是用terminate, 是用Create了一个Event, 线程execute用了个循环
repeat ... until terminated, 在循环中用WaitForMultipleObjects, 判断如果是
退出的Event置位了然后就break(还有其他Event, 相对执行不同操作, 平时Thread处于休眠
状态).
主进程中关闭Thread用
SetEvent(the_close_Event);
Thread1.Suspend;

Thread1.Free;
结果退出时"非法操作错误", 但程序能结束, Thread中调用的dll也释放成功, 不知道这个
非法操作出在哪?
 
呵呵, 如果您需要确保产生的线程都结束的话,
在主线程中需要记住产生的线程的ThreadHandle,
然后在SetEvent之后,您就:
WaitForSingleObject(theThreadHandle);
CloseHandle(theThreadHandle);
That's OK!
 
多人接受答案了。
 
后退
顶部