社区
Delphi
帖子详情
在delphi中如何判断线程终止
necyhk
2006-12-14 08:59:29
能不能判断线程的状态,是运行,还是挂起呀?怎样得知线程结束了?
我做了一个线程队列,用队列管理线程,可是无法得知哪个线程是否结束了,然后让结束了的线程重新启动?
Obj: TQueryThread
用delphi的TThread类实现
用什么方法可知线程结束了,我用线程句柄,有的线程结束了,但句柄不是0
请问用什么方法判断线程结束了?然后重启结束的线程
...全文
1652
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
Python菜鸟入门:day06元组与字典
写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除) 传送门: day01 day02 day03 day04 day05 Python学习:day06Python元组访问元组修改元组删除元组元组运算符元组索引,截取元素内置函数len(tuple)max(tuple)min(tuple)tuple(iterable)关于元组是不可变的字典访问字典里的值修改字典删除字典
中
的元素字典键的特性字典内置函数&方法 Pyt
python字典键值可以是元组或列表吗_Day02--python数据类型之列表、元组、字典和集合...
python
中
的列表# 列表# list 类,列表#
中
括号括起来 ,逗号分隔每个元素,列表
中
的元素可以是数字,字符串,列表,布尔值等等。# 列表还可以嵌套列表=========列表的基本操作=========(1)列表的常用操作list1 = [11,22,33,44,55]#len 查看列表的元素的个数print(len(list1))#通过索引取值print(list1[3])#对列表进行切...
刻意练习Python基础 ——day 03:列表与元组(上)
17天将 “Python基础的刻意练习” 分为如下任务: Task01:变量、运算符与数据类型(1day) Task02:条件与循环(1day) Task03:列表与元组(2day) Task04:字符串与序列(1day) Task05:函数与Lambda表达式(2day) Task06:字典与集合(1day) Task07:文件与文件系统(2day) Task08:异常处理(1day) Ta...
python列表嵌套字典取值_Python学习100天-Day03(字符串、列表、字典、元组)
DAY03-字符串、列表、字典、元组一、字符串要明确一个重要的概念,字符串在python
中
是序列。例如,如果我们有一个含有四个字符的字符串,我们通过内置的len函数验证它的长度,通过索引操作区的各个元素。s='spam'len(s)#4s[0]#'s's[1]#'p'在python
中
,索引是从0开始,如此类推。大家要留意一个地方,python变量不需要提前声明,赋值给它的时候就创建了它,可以赋值任...
day8 - 列表和元组 - 学习总结
条件语句?值1 :值2 01 元组 1. 什么是元组(tuple) 元组是容器型数据类型;将()作为容器的标志,里面多个元素用逗号隔开:(数据1,数据2,数据3,…);元组不可变,不支持增删改;元组是有序的,支持下标操作;任何类型的数据都可以作为元组的元素。使用场景:如果希望同时保存多个数据,并且要求数据保存只能使用不能修改,就使用元组。空元组因为无法增删改,所以无意义、无价值 2)单个元素的元组 : tuple=(元素,) 单个元素的元组
中
,唯一的元素后面必须添加逗号;如果不添加逗号,
Delphi
5,944
社区成员
262,941
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章