0

私は C++ フレームワークを使用しました。このフレームワークでは、すべてのループ サイクルの最後の yield が必須でした。C# と C++/CLI から始めたので、yield 関数にも出くわしました。イベント ループを作成していますが、yield の使用が必要かどうか疑問に思っていました。フレームレートが重要なゲームを作成しているわけではなく、最大のパフォーマンス (速度) を目指しています。

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

異なるアプリケーション間で実行時間を適切に分割できるプラットフォームではありませんか? そのため、yield を使用する必要がありますか?

はいの場合、どれくらいの時間これを行う必要がありますか?スレッドスリープを使用する方が良いのではないでしょうか?優先度の低いスレッドにも余分な時間がかかりますか?

.NET 以外の言語に関する回答も歓迎します。利回りの一般的な目的が本当に必要かどうか、私はただ興味があります。

ありがとう

4

1 に答える 1

1

私が理解している限り、ここで使用する利回りは sleep(0.00...01) と同じです。これは、現時点でこれ以上作業を行う必要がないことをスケジューラーに伝えます。

プラットフォームは時間を分割することができますが、スレッドを中断するのが最適な時期を (ユーザーに知らせずに) 知ることはできません。

そのため、プロセス/スレッドを明け渡すことなく、スケジューラーはスレッドに 29 回のループをすぐに通過させる可能性があります。これは、新しい入力がない可能性があるため、冗長です。そして、あなたは丸一秒の間、別のラウンドを取得しません. 冗長な仕事をするよりも譲歩したほうがいいので、重要なときにすぐに仕事に戻ることができます.

もう 1 つの理由は、途中でスケジューラがループを一時停止する可能性が高いためです。これは、レンダリングが遅れることを意味します。最後に譲歩するということは、スケジューラがスレッド/プロセスに 1 回のループにかかる平均時間よりも多くの時間を費やすことを意図している場合、スレッド/プロセスがループの途中で一時停止する可能性が低くなることを意味します。

于 2014-04-30T10:02:39.490 に答える