anI使用了C ++框架,其中每个循环周期结束时的yield是强制性的。现在我开始使用C#和C ++ / CLI,我也遇到了yield函数。我正在创建一个事件循环,并想知道是否需要使用yield。我不是在制作游戏,帧速率非常重要,我要求最高性能(速度)。
function main
{
initialize
loop(!quit){
update input
update application
render
yield
}
terminate
}
不是一个能够在不同应用程序之间正确划分运行时间的平台,我应该使用产量吗?
如果是的话,我应该多长时间执行此操作并且使用线程休眠不是更好,因此优先级较低的线程也会获得一些额外的时间?
关于.NET的其他语言的答案也很受欢迎。如果收益的一般目的是真的必要,我只是好奇。
由于
答案 0 :(得分:1)
据我所知,这里使用的产量与睡眠(0.00 ... 01)相同。它告诉调度程序您现在不需要做更多的工作。
该平台能够划分时间,但它无法知道(没有你告诉它),什么时候最好打断一个线程。
因此,在不产生进程/线程的情况下,调度程序可能会使您的线程在循环中经过29次循环,这是多余的,因为可能没有新的输入。然后你将不会再获得一轮整秒。最好是屈服而不是做多余的工作,所以你可以尽快恢复工作。
另一个原因是,当你处于中间时,调度程序很有可能暂停你的循环,这意味着渲染将会延迟。在结束时产生意味着,如果调度程序为您的线程/进程花费的时间多于平均循环所需的时间,那么您不太可能在循环中间暂停线程/进程。