社区
Delphi
帖子详情
在delphi中如何判断线程终止
necyhk
2006-12-14 08:59:29
能不能判断线程的状态,是运行,还是挂起呀?怎样得知线程结束了?
我做了一个线程队列,用队列管理线程,可是无法得知哪个线程是否结束了,然后让结束了的线程重新启动?
Obj: TQueryThread
用delphi的TThread类实现
用什么方法可知线程结束了,我用线程句柄,有的线程结束了,但句柄不是0
请问用什么方法判断线程结束了?然后重启结束的线程
...全文
1570
13
打赏
收藏
在delphi中如何判断线程终止
能不能判断线程的状态,是运行,还是挂起呀?怎样得知线程结束了? 我做了一个线程队列,用队列管理线程,可是无法得知哪个线程是否结束了,然后让结束了的线程重新启动? Obj: TQueryThread 用delphi的TThread类实现 用什么方法可知线程结束了,我用线程句柄,有的线程结束了,但句柄不是0 请问用什么方法判断线程结束了?然后重启结束的线程
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
中
,多
线程
可以通过多种方式实现,包括使用TThread类、动态
线程
变量、
线程
同步机制等。 TThread类是
Delphi
中
进行多
线程
编程的核心,它封装了创建和控制
线程
所需的方法和属性。开发者可以通过继承TThread类并重写其Execute方法来定义
线程
的具体行为。在主
线程
中
,可以使用CreateAndResume方法来创建并启动新
线程
,或者使用Create方法创建
线程
后,通过Resume方法手动启动它。 为了在多
线程
环境
中
安全地共享数据,
Delphi
提供了同步机制,如TCriticalSection、TMutex和TSemaphore。这些同步对象帮助开发者避免竞态条件和数据冲突,确保
线程
间的协调访问。 此外,
Delphi
还支持动态
线程
变量,允许每个
线程
独立维护自己的变量副本,以及TThread变量,它允许访问与当前执行
线程
相关的对象。 在编写多
线程
程序时,
Delphi
开发者需要关注
线程
的生命周期管理、
线程
间的通信、错误处理以及避免死锁等问题。通过合理设计和使用
Delphi
提供的多
线程
工具
Delphi
中
多
线程
应用的简单范例
ThreadExample
Delphi
中
多
线程
应用的简单范例
delphi
多
线程
编程详解.pdf
delphi
多
线程
编程详解,里面对
delphi
多
线程
的应用做了详细的说明
Delphi
5,927
社区成员
262,932
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章