如何暂停/恢复/停止多线程?(200分)

  • 主题发起人 主题发起人 kasd
  • 开始时间 开始时间
K

kasd

Unregistered / Unconfirmed
GUEST, unregistred user!
如何暂停/恢复/停止多线程?
用MyThread.Suspended:=true; //暂停
MyThread.Suspended:=true; //恢复
Mythread.Terminat;//停止
好像不行!请问该怎么办?
需要强制暂停/恢复/停止
 
这么简单!
MyThread.Suspend;
//暂停
MyThread.Resume; //恢复
Mythread.Terminate;//停止
但停止光用Mythread.Terminate好象不太行,可搜索一下以前的问题,搜“线程”
 
Suspend 和Resume必须一一对应
 
myThread.suspend;
挂起线程
myThread.Resume;唤醒;
myThread.TerminatThread;强行结束线程
 
我的线程一共Create了10次,如何把它们全部停止/暂停/恢复?
用上面的方法只能停止/暂停/恢复最后一个线程
 
Suspend 和Resume必须一一对应
是什么意思?能不能说具体一点
 
定义一组线程变量,每一个变量对应一个create产生的实例,然后可以对每一个变量进行操作.
如你定义的线程类是Mythread
var thread1,thread2,...:Mythread;
thread1=Mythread.create(self);
thread1.suspend;
thread1.resume;
...
我记得是这样的.
你不能直接对Mythread操作,那样就会出现你遇到的情况
 
OK,暂停和恢复都可以了,现在就差停止了!该如何实现??用MyThread1.Terminat停不下来!
 
FreeOnTerminate:=True;
Mythread.Terminate;

 
create(false):创建线程后马上执行线程,相当于threadObj.resume;
threadObj.suspend;
//挂起线程暂停线程执行;
注意:Resume 和 suspend 是相对应的,没RESUME一次实际上相当于计数器加1,而suspend
是计数器减1,当计数器为0 则线程恢复执行.
楼上雨人兄:“myThread.TerminatThread;强行结束线程”只有在程序出现非常特殊的
危急情况才好使用,此方法是很不理想的,也不安全。
停止线程:THREADOBJ。TERMINATE;//但是线程没有真正释放。
释放线程最好使用:exitthread;
 
参考:
问题:怎样强制性终止正在运行的线程? ( 积分:50, 回复:13, 阅读:134 )
分类:多线程 ( 版主:g622, wjiachun )
来自:luckystart, 时间:2001-11-25 20:24:00, ID:750068
http://www.delphibbs.com/delphibbs/dispq.asp?lid=750068
 
//首先在线程数组定义一个线程变量
type
TThreadStatus = record
threadobject: TThread;
//其他的
end;
//然后在创建线程的时候把这个变量福祉为创建的线程
//然后按照以下方法的中止,好像比较的安全。
TThread(Tthreadstatus.threadobject).FreeObjectAfterTerminate(nil);
terminatethread(Threadstatus.threadobject.handle, 0);
 
问题解决了!
谢谢各位相助!!
 
后退
顶部