CPUを譲らずに時間を「無駄にする」最も簡単な方法は、タイトループです。
無駄の期間を制限する必要がない場合(たとえば、完了したらプロセスを終了するだけで制御できます)、Cスタイルに進みます*:
for (;;) {}
(ただし、この標準では、プログラムが最終的に終了することを実装で想定できるため、技術的に言えば、このループ(少なくともC ++ 0xでは)の動作は未定義であり、最適化できることに注意してください。**
それ以外の場合は、手動で時間を計ることができます。
time_t s = time(0);
while (time(0) - s < 20) {}
または、time
syscallを繰り返し発行する代わりに(カーネルで時間がかかることになります)、GNU互換システムでは、 signal.h
「アラーム」を使用してループを終了できます。
alarm(20);
while (true) {}
「ハンドラーの戻り値」のドキュメントページにも、非常によく似た例があります。
(もちろん、これらのアプローチはすべて、その間に100%CPUに移動し、ふわふわのユニコーンが耳から落ちるようになります。)
*わかりやすくするために、意図的に使用される{}
トレーリングではなく。;
最終的に、このようなコンテキストでセミコロンを作成する言い訳はありません。入り込むのはひどい習慣であり、「実際の」コードで使用するとメンテナンスの落とし穴になります。
**およびを参照[n3290: 1.10/2]
してください[n3290: 1.10/24]
。