0

我使用了一个 C++ 框架,其中每个循环周期结束时的 yield 是强制性的。现在我从 C# 和 C++/CLI 开始,我也遇到了 yield 函数。我正在创建一个事件循环,并且想知道是否有必要使用 yield。我不是在创建一个帧速率很重要的游戏,我要追求最高性能(速度)。

function main
{
    initialize
    loop(!quit){
        update input
        update application
        render
        yield
    }
    terminate
}

平台是否不能在不同的应用程序之间正确划分运行时间,因此我应该使用 yield 吗?

如果是,我应该这样做多长时间,使用线程睡眠不是更好吗,所以优先级较低的线程也可以获得一些额外的时间?

也感谢有关 .NET 的其他语言的答案。我只是好奇 yield 的一般目的是否真的有必要。

谢谢

4

1 回答 1

1

据我了解,此处使用的产量与 sleep(0.00...01) 相同。它告诉调度程序你现在不需要做更多的工作。

平台能够划分时间,但它不知道(没有你告诉它)什么时候最好中断一个线程。

因此,在不产生进程/线程的情况下,调度程序可能会使您的线程立即执行 29 次循环,这是多余的,因为可能没有新的输入。然后你一秒钟都不会再打一轮。最好屈服于做多余的工作,这样你就可以在重要的时候更快地恢复工作。

另一个原因是当你在中间时调度器很有可能暂停你的循环,这意味着渲染会延迟。最后产生意味着,如果调度程序打算为您的线程/进程提供比一个循环平均花费更多的时间,那么您不太可能让线程/进程在循环中间暂停。

于 2014-04-30T10:02:39.490 回答