囲みコラム

snooze()によるCPUの明け渡し


リスト7.16を見ると分かるように、CheckTask()メソッドを繰り返し呼び出す合間にsnooze()を呼び出しています。つまり、インスタンスに設定されている間隔だけ動作を停止し、他のスレッドにCPUを明け渡しています。もちろん、BeOSのスケジューリングはプリエンプティブなので、こうしなくても自動的に他のスレッドへ処理が切り替わります。しかし、次にCheckTask()を呼び出すまでの間待っているだけの時に、CPU時間を消費してしまうのは無駄ですから、そういう場合はsnooze()を使って一時的にスレッドの動作を停止してしまうようにするべきです。それにより、結果として全体の処理がよりスムーズになります。


Art of BeOS Programming
koga@stprec.co.jp