web-dev-qa-db-ja.com

無限のwhileループCPU使用率

私はCでスクリプトをコーディングしています。これは、一連のイベントを常に確認する予定です。特定のイベントの日付と時刻が現在の時刻と等しいかどうかを確認して何かをトリガーすることです。これは、 while(1){}ですが、この方法ではCPU使用率が高くなりますが、CPU使用率を低くしてこれを行う方法を教えてください。

3
David T

最良の方法は、次にアレイに追加したときの時間を追跡し、その時間までスリープすることです。

そのため、新しいイベントを配列に追加するときは、最初にトリガーするか、現在格納されている「次のイベント」より後にトリガーするかを決定する必要があります。その後、ループは単純にスリープ状態になります(おそらく「毎秒定期的に起動して、「まだ実行中」の診断を出力します)。

これには、イベントをトリガーするために起動するスレッドがミューテックスと同期している必要があるため、現在の次のイベントよりも早く発生する新しいイベントが追加された場合に、早めに起動することができます。次に、このスレッドは次回の再計算を行い、ミューテックスを設定し、ミューテックスが再度トリガーされるか、タイムアウトが発生するまで待機します。

3
gbjbaanb

すばやく簡単な解決策は、スリープ呼び出しを追加して、プロセッサを他のアプリケーションに譲ることです。これにより、CPU使用率が大幅に低下します。

可能であれば、より良い解決策は、メソッドをコールバックで呼び出すことです。たとえば、Win32 UIイベント処理では、特定のイベントのコールバックを登録できます。

2
Berin Loritsch