Cha*_*iga 35 delphi delphi-2010
在我的多线程应用程序中
我使用TThread.suspend和 TThread.resume
自从将我的应用程序移至Delphi 2010后,我收到以下交战消息
[DCC警告] xxx.pas(277):不推荐使用W1000符号'Resume'
如果弃用Resume应该使用什么?
编辑1:
我使用Resume命令启动线程 - 因为它创建时将'CreateSuspended'设置为True并在终止线程之前挂起.
编辑2:
RRU*_*RUZ 28
Charles如果你读过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;
Run Code Online (Sandbox Code Playgroud)
请参阅此链接 http://wings-of-wind.com/2009/08/28/rad-studio-2010-community-pulse-the-day-after-part-2/
编辑:
如果需要同步线程,可以使用基于TMutex,TEvent和关键部分的方案.
再见.
Phi*_*hiS 13
使用TThread.Start而不是.Resume
--EDIT--开始当然只能用于Delphi 2010(以及后来,大概是)用来启动一个被挂起的线程(之前你曾经使用过Resume).
不建议使用Resume/Suspend(或相应的WinAPI函数)进行线程同步.请参阅此处的讨论(请参阅Barry Kelly的评论).
Suspend和Resume曾经(或曾经)在TThread类中被破坏(如果查看源代码,您将看到Suspend方法直接无条件地将布尔值设置为指示的线程挂起状态,而不是更强大地从该状态导出此状态线程句柄上的执行计数.具有讽刺意味的是,Resume方法确实使用这个更健壮的指标来更新暂停状态Boolean).
这可能是他们被弃用的原因.这也是为什么我实现自己的类来封装具有更强大的挂起和恢复机制的Windows线程以及在线程完成后重新启动线程的能力.
我不确定为什么他们的弃用与同步有关.暂停和恢复线程不一定与同步有关,虽然我可以看到它是如何的.有趣的是,.NET框架Thread类中的等效方法同样标记为已废弃.同样的评论同步出现在Windows API文档中,用于线程挂起/恢复.
如果使用弃用方法会让您感到紧张并且您仍希望暂停/恢复,则可以始终使用Windows API 通过引用它的句柄来暂停和恢复该线程.
万一您想要做的就是摆脱编译器提示
(1)在启动线程时摆脱编译器提示...
更换
MyThread := TMyThread.Create(True);
MyThread.Resume;
Run Code Online (Sandbox Code Playgroud)
与
MyThread := TMyThread.Create(True);
MyThread.Start;
Run Code Online (Sandbox Code Playgroud)
(2)在停止线程时摆脱编译器提示...
更换
MyThread.Suspend;
MyThread.Terminate;
Run Code Online (Sandbox Code Playgroud)
与
MyThread.Terminate;
Run Code Online (Sandbox Code Playgroud)
没什么大不了的。提防混淆。
使用
Suspended := False; // Resume;
Run Code Online (Sandbox Code Playgroud)
或者
Start;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30681 次 |
最近记录: |