如果我有一个
While not terminated do
begin
doStuff;
end
在 Delphi XE2 线程的执行方法中循环,我不想让它让我所有的失败。
我该怎么称呼,
在 Delphi 7 中,这很简单,我调用 Sleep(X),其中 X 与我认为线程的有趣程度成反比。
但现在,我有
SpinWait(X);
调用 YieldProcessor X 次
and
Yield;
它调用 Windows 函数“SwitchToThread”。
我应该使用其中任何一个还是应该设置线程的优先级?
SpinWait
浪费时间而不放弃处理器。就像是Sleep
,但在延迟期间不会将控制权交给任何其他线程。如果您没有多个核心,那么这完全是浪费,因为在您旋转时没有其他线程可以做任何事情。据我所知,Yield
类似于Sleep(0)
,但如果没有其他线程准备运行,则调用线程将立即继续。
如果您知道您的线程确实没有其他事情可做,那么这两种听起来都不是您想要的。
最好的解决方案是找到或建立一些可以等待收到信号的可等待对象(如信号量、事件或进程句柄)。这样您就不必费心醒来,只需轮询您的状态即可再次入睡。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)