如何安全的结束线程

lengx7 2009-04-21 02:09:15
使用hThread:=CreateThread(nil,0,@Fun,nil,0,ID);创建了一个线程,Fun是个While死循环
现在要结束hThread,然后重新hThread:=CreateThread(..@Fun..)
在创建之前,怎么才能安全的结束并释放先前的线程资源啊?

GetExitCodeThread(hThread,Code),只要hThread的线程还在运行,的Code就一定等于259么?我想用Code的值来判断hThread是否被异常结束了,不知道是不是这样的。。。
...全文
137 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lengx7 2009-04-23
  • 打赏
  • 举报
回复
最后不用CreateThread转TThread类去了。。。
TestThread:=TMyThread.Create(True);
创建之后不一定使用,所以在释放的时候检查一下
if TestThread.Suspended=True then TestThread.Resume;
TestThread.Terminate;


没想到居然会在if TestThread.Suspended=True...这句报错,郁闷了,直接Terminate主程序,不管你线程死活了
lhy 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lengx7 的回复:]
最后不用CreateThread转TThread类去了。。。
TestThread:=TMyThread.Create(True);
创建之后不一定使用,所以在释放的时候检查一下
if TestThread.Suspended=True then TestThread.Resume;
TestThread.Terminate;


没想到居然会在if TestThread.Suspended=True...这句报错,郁闷了,直接Terminate主程序,不管你线程死活了
[/Quote]
TThread不用自己释放,Delphi会帮你释放的。
Bear_hx 2009-04-23
  • 打赏
  • 举报
回复
为什么不这样写呢

if TestThread.Suspended then TestThread.Resume;
Bear_hx 2009-04-22
  • 打赏
  • 举报
回复
TerminateThread不推荐使用
柳慧妍 2009-04-22
  • 打赏
  • 举报
回复
TerminateThread
leovin2008 2009-04-21
  • 打赏
  • 举报
回复
如果线程中是大循环的话, 让 线程 实时 Break 是比较安全的
Bear_hx 2009-04-21
  • 打赏
  • 举报
回复
可以学习TThread的封装,用一个变量来表示FTerminated,在Fun里面不停的监测FTerminated,外面停止的时候就把FTerminated赋为False.
Seamour 2009-04-21
  • 打赏
  • 举报
回复
当然要自己弄了
lhy 2009-04-21
  • 打赏
  • 举报
回复
如果是CreateThread当然要自己释放各种资源,
如果直接使用TThread类的子类就由Delphi办了。
lengx7 2009-04-21
  • 打赏
  • 举报
回复
想着就这么写出来了。。。

让线程序这样正常结束后,需要调用CloseHandle或者其他的方法释放资源么?
Seamour 2009-04-21
  • 打赏
  • 举报
回复
干嘛不
while x<>0 do
呢……

让x=0不就可以正常结束了么
lengx7 2009-04-21
  • 打赏
  • 举报
回复
function Fun():integer;
var
test:integer;
begin
While True do begin
if x=0 then exit;
.............
end;
end;

那么把Fun改成这个样子后,有办法"安全"的解决么?
Seamour 2009-04-21
  • 打赏
  • 举报
回复
要是调用的线程不包含任何退出和清理的机制,那就别指望能“安全的结束并释放”

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧