社区
Delphi
帖子详情
在delphi中如何判断线程终止
necyhk
2006-12-14 08:59:29
能不能判断线程的状态,是运行,还是挂起呀?怎样得知线程结束了?
我做了一个线程队列,用队列管理线程,可是无法得知哪个线程是否结束了,然后让结束了的线程重新启动?
Obj: TQueryThread
用delphi的TThread类实现
用什么方法可知线程结束了,我用线程句柄,有的线程结束了,但句柄不是0
请问用什么方法判断线程结束了?然后重启结束的线程
...全文
1628
13
打赏
收藏
在delphi中如何判断线程终止
能不能判断线程的状态,是运行,还是挂起呀?怎样得知线程结束了? 我做了一个线程队列,用队列管理线程,可是无法得知哪个线程是否结束了,然后让结束了的线程重新启动? Obj: TQueryThread 用delphi的TThread类实现 用什么方法可知线程结束了,我用线程句柄,有的线程结束了,但句柄不是0 请问用什么方法判断线程结束了?然后重启结束的线程
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hjksoft
2006-12-21
打赏
举报
回复
顶
oushengfen
2006-12-21
打赏
举报
回复
呵呵,学习了不少
comanche
2006-12-15
打赏
举报
回复
delphi 线程作了封装哦, 不但可以在 windows 平台下跑, 也能在 linux 下跑的, 好的代码不要去用 API, TThread 本身封装了些属性, 这样装了 crossKyrix 后, 可以直接编译成 linux 运行文件
property Suspended 暂停
property Terminated 中止
function WaitFor 阻塞等线程结束, 代替 WaitForSingleObject, 返回结果是相同的
看到前面提到 FreeOnTerminate 应小注意一下, 这种线程是不受控的, 一般是那种暂态的, 做完后不需去了解状态的线程, FreeOnTerminate = true 时, 线程属性是不应该去访问的,在建立时设什么就是什么, 因为线程随时可能被释放, 因此极难作收集管理用
hangzhou_hammer
2006-12-15
打赏
举报
回复
感谢楼上的 例子~~是我了解了WaitForSingleObject的用法
wudi_1982
2006-12-15
打赏
举报
回复
楼上的一些方法都说了,我多说一点
根据WIN32平台内核对象的一些原则
线程在仍然活动时,内核对象处于未通知状态,线程中止时,处于通知状态,所以可以根据线程句柄配合等待函数来做
给你写了一个例子:随手写的代码,仅用来演示,实际使用时要注意一些细节。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TTestThread=class(tthread)//被测试线程,仅仅是将窗体的caption从0变到10000
protected
procedure Execute;override;
end;
TmThread = class(tthread)//检测线程,当被侧线程中止时,显示一个对话款
protected
procedure Execute;override;
end;
var
Form1: TForm1;
t : TTestThread;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
t := TTestThread.Create(false);
TmThread.Create(false);
end;
{ TTestThread }
procedure TTestThread.Execute;
var
i : integer;
begin
FreeOnTerminate := true;
for i := 0 to 10000 do
Form1.Caption := Format('%d',[i]);
end;
{ TmThread }
procedure TmThread.Execute;
begin
if WaitForSingleObject(t.Handle,INFINITE)=WAIT_OBJECT_0 then
ShowMessage('线程已经中止');
end;
end.
newfang
2006-12-15
打赏
举报
回复
freeonterminate := true;
necyhk
2006-12-15
打赏
举报
回复
我试过了,线程execute过程执行完了,但线程对像还没有释放
chinayk11
2006-12-14
打赏
举报
回复
Assigned(Thread) and not Thread.Terminated //正运行
daviddelphilee
2006-12-14
打赏
举报
回复
OnTerminate
guoyabin2000
2006-12-14
打赏
举报
回复
在线程里自己定义一个变量用来表示线程的运行状态吧
hongqi162
2006-12-14
打赏
举报
回复
任务完成以后就挂起
然后判断时候挂起
Thread.Suspended
线程唤醒
Thread.Resume
lonoaer
2006-12-14
打赏
举报
回复
WaitForMultipleObjects
Delphi
多
线程
编程
中
的技巧
本文详细介绍了
Delphi
中
的
线程
管理技巧,包括
线程
的创建、执行、
终止
及状态
判断
等,并深入探讨了
线程
同步的方法,如使用临界区、互斥和信号量等手段来确保数据的一致性和程序的稳定性。
delphi
判断
线程
状态函数
本文介绍了如何在
Delphi
中
判断
线程
的状态,包括检查
线程
是否已经释放、正在运行或者已经
终止
等,并提供了具体的实现代码。此外还讨论了如何正确地释放
线程
资源。
判断
线程
是否释放
本文介绍了一个用于检查
线程
状态的
Delphi
函数,该函数能够
判断
线程
是否已释放、正在运行、已
终止
但未释放或未建立/不存在。
DELPHI
-
线程
的
终止
和退出
本文探讨了在
Delphi
中
使用
线程
时如何正确处理窗体关闭情况,包括手动关闭
线程
以释放资源的方法,以及在窗体关闭时自动关闭
线程
的技巧。此外,还详细介绍了
DELPHI
线程
的自动退出、受控退出以及退出API函数的使用,同时解决关闭程序时遇到的“无效窗口句柄”问题提供了实用方法。
【
delphi
11】
delphi
进阶【七、多
线程
编程在
Delphi
中
的实现】
本文介绍了并发和多
线程
的基本概念,详细讲解了在
Delphi
中
通过TThread类实现多
线程
的步骤,包括创建
线程
、
线程
同步、注意事项以及多种多
线程
实现方式,如匿名
线程
、任务和
线程
池等。
Delphi
5,943
社区成员
262,942
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章