+ -
当前位置:首页 → 问答吧 → 使用Delphi XE TThread时的一些问题

使用Delphi XE TThread时的一些问题

时间:2011-08-08

来源:互联网

使用Delphi XE封装的TThread类写多线程程序

在Button1的click事件中写入

Delphi(Pascal) code

procedure TForm1.Button1Click(Sender: TObject);
begin
  workthread:=TCJThread.Create(True);
  workthread.FreeOnTerminate :=True;
  workthread.Start;
end;



当线程执行完后就释放了,如果我在按button1,为何不会重新执行线程了呢?

button2为挂起线程代码,workthread.suspend;

执行完线程后,按暂停会是TThread Error(句柄无效6);怎么才能良好去容错呢?

还有激活线程代码 workthread.resume; 也和挂起线程的结果一样,如何解决?


在编译的时候会提示

[DCC Warning] Unit1.pas(61): W1000 Symbol 'Resume' is deprecated
[DCC Warning] Unit1.pas(78): W1000 Symbol 'Suspend' is deprecated

不知道如何才能正却的去使用suspend和resume;这个提示在D7中是没有的!

请高手给详细讲解一下,谢谢了!恭喜各位发大财...嘿!

作者: WinSockCF   发布时间: 2011-08-08

这两方法建议使用

作者: Im17benteng   发布时间: 2011-08-08

不建议使用吧

为什么 Thread.suspend 和 Thread.resume 被废弃了?

Thread.suspend 天生容易引起死锁。如果目标线程挂起时在保护系统关键资源的监视器上持有锁,那么其他线程在目标线程恢复之前都无法访问这个资源。如果要恢复目标线程的线程在调用 resume 之前试图锁定这个监视器,死锁就发生了。这种死锁一般自身表现为“冻结( frozen )”进程。 

详细请看下面
http://www.cnblogs.com/phoebus0501/archive/2011/02/22/1961639.html

作者: onlyou13   发布时间: 2011-08-08

引用 2 楼 onlyou13 的回复:

不建议使用吧

为什么 Thread.suspend 和 Thread.resume 被废弃了?

Thread.suspend 天生容易引起死锁。如果目标线程挂起时在保护系统关键资源的监视器上持有锁,那么其他线程在目标线程恢复之前都无法访问这个资源。如果要恢复目标线程的线程在调用 resume 之前试图锁定这个监视器,死锁就发生了。这种死锁一般自身表现为“冻结( frozen )”进程……
这个虽然不是delphi的,但是也差不多

作者: onlyou13   发布时间: 2011-08-08

解决一下我所说的实际问题呢? :(

作者: WinSockCF   发布时间: 2011-08-08

热门下载

更多