Pet*_*ner 3 delphi multithreading delphi-xe2
如果我有一个
While not terminated do
begin
doStuff;
end
Run Code Online (Sandbox Code Playgroud)
在Delphi XE2线程的execute方法中循环,我想不要让它变成我所有的翻牌.
我该怎么称呼
在Delphi 7中,它很简单,我称之为Sleep(X),其中X与我认为该线程的有趣程度成反比.
但是现在,我有了
SpinWait(X);
Run Code Online (Sandbox Code Playgroud)
其中调用YieldProcessor X的次数
和
Yield;
Run Code Online (Sandbox Code Playgroud)
它调用windows函数"SwitchToThread".
我应该使用其中任何一个还是应该设置线程的优先级?
SpinWait浪费时间而不放弃处理器.它就像Sleep,但在延迟期间没有让任何其他线程控制.如果你没有多个核心,那么这是完全浪费,因为在你旋转时没有其他线程可以做任何事情.就我所知,Yield类似于Sleep(0),除非没有其他线程准备好运行,那么调用线程会立即继续.
如果你知道你的线程真的没有别的事可做,那么这些听起来都不是你想要的.
最好的解决方案是找到或建立一些可以等待发出信号的可等待对象(如信号量,事件或进程句柄).然后你根本不必费心醒来,这样你就可以轮询你的状态并再次入睡.