DELPHI 用TThread如何判断线程是不是存在 并且释放线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DELPHI 用TThread如何判断线程是不是存在 并且释放线程相关的知识,希望对你有一定的参考价值。

判断线程是否存在使用:
if Assigned(workthread) then
begin
//do work
end;

释放线程使用:
可以使线程对象自动释放,使用:workthread.FreeOnTerminate :=True;
如果想自己释放线程则应该先判断线程是否存在和是否结束然后再释放,使用:
if Assigned(workthread) and (not workthread.Finished) then
begin
//workthread.terminate; //停止线程
//workthread.suspended; //使线程暂停
以上两种都可以,如果使用Terminate则应该等待线程完全结束
workthread.Free; //释放线程
end;追问

我做的是 LABEL的 CAPTION 每秒加1的刷新 用你的方法释放会报句柄错误

追答

给我你的邮箱,我简单的写个例子,发给你!

参考技术A 通过线程 Handle 或ThreadID来识别线程, 通过 属性 Terminated 测试线程是否终止. 参考技术B Thread.FreeOnTerminate := True; 时线程执行体结速就会自动释放 参考技术C 线程和普通过程,并无二样,一段过程执行完毕后,它的使命也就完成了.无需释放销毁.

delphi如何判断RichEdit是不是显示到底部了?

如题,用SendMessage(RichEdit1.Handle, EM_SCROLL, SB_LINEDOWN, 0);richedit里面的文本往下滚动,当滚到底部时候showmessage一下,如何判断是否已经滚到底部了?
没有recordcount

SendMessage带有返回值,查看MSDN,关于EM_SCROLL,其返回值的低位Word是滚动的次数,如你所述,一次SendMessage,滚动一次,到底部则返回滚动0次,程序代码示例如下:
var
n : Integer;

......
n := SendMessage......
if n and $FFFF = 0 then
ShowMessage( '到底了' );
或者
if LongRec( n ).Words[0] = 0 then
ShowMessage...;
......
参考技术A var
i :integer;
if i = richedit.RecondCount-1 then
begin
showmessage('the last one!');
end

以上是关于DELPHI 用TThread如何判断线程是不是存在 并且释放线程的主要内容,如果未能解决你的问题,请参考以下文章

转:学习笔记: Delphi之线程类TThread

DELPHI 多线程(TThread类的实现)

delphi中的线程安全

delphi多线程参数传递问题

如何在 Delphi 中进行线程化的各种方式之间进行选择?

Delphi 多线程问题