如何停止一个线程运行呢?

oicq111 2005-10-27 09:38:11
如何停止一个线程运行呢?很急!我调用线程是sjcl.Create(false);,如何停止呢?谢谢!
...全文
224 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lostmyway 2005-10-28
  • 打赏
  • 举报
回复
sjcl.Create(false) sjcl应该是一个 TThread类吧(习惯上类都会使用T前缀 如TMyThread)

终止运行是用terminate方法

但是terminate实际上是改了一个终止标志,即设置terminated为True,线程不一定立即停止运行了

所以通常在 线程的执行体 即execute方法中会增加 if not terminated then 判断, 这样的话,一旦调用teminate方法,就能最快的停止运行, 同时可能需要考虑数据丢失的问题(因为中断,未执行一些代码),可以在onTerminate中补充做些事情

最终 线程做什么,怎么做 还是很自由的 看你的需求啦,以上只是习惯上的做法

另外,对Win32的线程理解 你可以去学学用API做 因为VCL的TThread只是一个包装类 一件外衣,它的核心是一个叫ThreadProc的 Procdure(其中自然 是用Win32的API了)

ps: inst := sjcl.Create(false) 线程已经内调了 resume, 之前我说错了
oicq111 2005-10-27
  • 打赏
  • 举报
回复
不是拽啊,我是才学的,不知道所以急,又要急用,是不是缺少基本单位啊!sjcl.terminate 运行不了!
lostmyway 2005-10-27
  • 打赏
  • 举报
回复
61

lz拽的很

某些基本概念欠缺 仔细看看帮助去!
oicq111 2005-10-27
  • 打赏
  • 举报
回复
我的DELPHI怎么这样写都通过不了啊!
只有sjcl.Create(false);
qzxyd 2005-10-27
  • 打赏
  • 举报
回复
sjcl.terminate可销毁线程,但不安全。
sjcl是delphi的线程类的话,也可sjcl.free,这样会稍安全。
但还是要考虑到free前资源的释放的时差问题。
oicq111 2005-10-27
  • 打赏
  • 举报
回复
sjcl.terminate ,但运行通不过啊!
supercc 2005-10-27
  • 打赏
  • 举报
回复
sjcl.Suspend //这个是暂停线程的运行,此时线程运行在哪一句,就暂停在哪一句

sjcl.terminate //这个是销毁线程,执行后,此线程就不存在了
kfanffvga 2005-10-27
  • 打赏
  • 举报
回复
sjcl.Suspend
clasj 2005-10-27
  • 打赏
  • 举报
回复
sjcl.terminate
oicq111 2005-10-27
  • 打赏
  • 举报
回复
什么乱七八糟,能详细一点吗?我调用线程是sjcl.Create(false);,如何停止呢?谢谢!
lostmyway 2005-10-27
  • 打赏
  • 举报
回复
线程终止可以用 inst.terminate;
lostmyway 2005-10-27
  • 打赏
  • 举报
回复
inst := sjcl.Create(false)

if sjcl is TThreadClass then
//>>如果没有调用 inst.resume,只是这样创建了线程对象,那你的线程都没有启动


线程启动可以用 inst.terminate;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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