首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TThread.resume在Delphi-2010中被否决了,应该使用什么?

TThread.resume在Delphi-2010中被否决了,应该使用什么?
EN

Stack Overflow用户
提问于 2009-09-13 17:39:02
回答 7查看 35.1K关注 0票数 35

在我的多线程应用中

我使用TThread.suspendTThread.resume

自从将我的应用程序移到Delphi 2010之后,我得到了下面的交战消息

DCC警告xxx.pas(277):W1000符号‘简历’被废弃为

如果简历不被推荐,应该使用什么?

编辑1:

我使用简历命令启动线程--因为在终止线程之前,它是用“CreateSuspended”设置为True和挂起创建的。

编辑2:

以下是delphi 2010手册的链接

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-13 18:02:29

查尔斯,如果你读过TThread类的代码,你找到答案了吗?

代码语言:javascript
复制
   TThread = class  
   private type  

..
..
..   
   public  
     constructor Create(CreateSuspended: Boolean);  
     destructor Destroy; override;  
     procedure AfterConstruction; override;  
     // This function is not intended to be used for thread synchronization.  
     procedure Resume; deprecated;  
     // Use Start after creating a suspended thread.  
     procedure Start;  
     // This function is not intended to be used for thread synchronization.  
     procedure Suspend; deprecated;  
     procedure Terminate;  

请参阅此链接RAD Studio 2010:社区脉搏:后天。(第2部)

编辑:

如果需要同步线程,可以使用基于TMutex、TEvent和关键部分的方案。

再见。

票数 29
EN

Stack Overflow用户

发布于 2009-09-13 17:49:46

使用TThread.Start而不是.Resume

--编辑--当然,开始只能与Delphi 2010一起使用(可能还可以在以后)启动创建暂停的线程(在此之前,您可以使用简历)。

不建议使用恢复/挂起(或相应的WinAPI函数)进行线程同步。请参阅讨论这里 (请看巴里凯利的评论)。

票数 13
EN

Stack Overflow用户

发布于 2009-09-13 20:55:18

挂起简历TThread类中可能被破坏(或曾经被破坏)(如果查看源,您将看到挂起方法直接和无条件地将布尔值设置为指示的线程挂起状态,而不是从线程句柄上的执行计数中更有力地导出此状态。具有讽刺意味的是,简历方法确实使用这个更健壮的指示符来更新挂起的状态布尔值)。

这可能就是他们遭到反对的原因。这也是为什么我实现了自己的类来封装一个具有更健壮的挂起和恢复机制的线程,以及在线程完成后重新启动的能力。

我不知道为什么他们的反对被认为与同步有关。挂起和恢复线程不一定与同步有关,尽管我可以看到它是如何实现的。值得注意的是,.NET框架线程类中的等效方法同样被标记为过时了。同样的注释w.r.t同步出现在用于线程挂起/恢复的Windows文档中。

如果使用不推荐的方法使您感到紧张,并且仍然希望挂起/恢复,则可以始终使用Windows进行挂起并根据线程的句柄恢复线程

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1418333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档