在我的多线程应用中
我使用TThread.suspend和TThread.resume
自从将我的应用程序移到Delphi 2010之后,我得到了下面的交战消息
DCC警告xxx.pas(277):W1000符号‘简历’被废弃为
如果简历不被推荐,应该使用什么?
编辑1:
我使用简历命令启动线程--因为在终止线程之前,它是用“CreateSuspended”设置为True和挂起创建的。
编辑2:
以下是delphi 2010手册的链接
发布于 2009-09-13 18:02:29
查尔斯,如果你读过TThread类的代码,你找到答案了吗?
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和关键部分的方案。
再见。
发布于 2009-09-13 17:49:46
使用TThread.Start而不是.Resume
--编辑--当然,开始只能与Delphi 2010一起使用(可能还可以在以后)启动创建暂停的线程(在此之前,您可以使用简历)。
不建议使用恢复/挂起(或相应的WinAPI函数)进行线程同步。请参阅讨论这里 (请看巴里凯利的评论)。
发布于 2009-09-13 20:55:18
挂起和简历在TThread类中可能被破坏(或曾经被破坏)(如果查看源,您将看到挂起方法直接和无条件地将布尔值设置为指示的线程挂起状态,而不是从线程句柄上的执行计数中更有力地导出此状态。具有讽刺意味的是,简历方法确实使用这个更健壮的指示符来更新挂起的状态布尔值)。
这可能就是他们遭到反对的原因。这也是为什么我实现了自己的类来封装一个具有更健壮的挂起和恢复机制的线程,以及在线程完成后重新启动的能力。
我不知道为什么他们的反对被认为与同步有关。挂起和恢复线程不一定与同步有关,尽管我可以看到它是如何实现的。值得注意的是,.NET框架线程类中的等效方法同样被标记为过时了。同样的注释w.r.t同步出现在用于线程挂起/恢复的Windows文档中。
如果使用不推荐的方法使您感到紧张,并且仍然希望挂起/恢复,则可以始终使用Windows进行挂起并根据线程的句柄恢复线程。
https://stackoverflow.com/questions/1418333
复制相似问题