今から10年以上まえのこと。
当時、自分はとあるゲームのプログラムを作っていました。
当時のWindowsゲームのプログラムは、
まぁ、いろいろな方法があったのですが、
画面に対してそれなりに動きのあるプログラムとか、
内部での演算が色々生じるプログラムの場合には、
2パターンほどの書き方に分かれます。
1つは、タイマーイベントを定期的に飛ばして、
タイマーイベント内で演算処理とか描画処理をする方法。
CPUがひ弱なPCではCPU占有率がうなぎ登りですが、
そこそこのスペックのPCなら、CPU占有率は逆に落ちてくれます。
ただ、タイマーイベントは優先順位が低いので、
スムーズな処理が出来ないというのが難点です。
※マルチメディアタイマーを使えば、タイムラグが少なく(と言っても10msec程度のラグはある)、処理が行えるけれど、
今度は、色々と制限が出てくる。
自分がとったのは別の方法で、
通常、自分のプログラムにOSからイベントが飛んでこなかったら、
イベントが来るまで休ませるプログラムを書きますが、
あえて、別スレッドを立てて、そのスレッドでゲームのプログラムぶん回し、
そのスレッド内で他のプログラムへのイベントなどが発生したことを検知したら、
そちらのプログラムにCPUをお裾分けする方式。
この方式は、当時の音楽再生ソフトとかでも多用されていた方法で、CPUの処理能力が十分あれば、
自分が必要としているタイミングがmsec以下のタイミングで制御できる画期的な方法です。
※CPU能力が少なくても、それなりに動きます。
が!
デバッガーから
「CPU100%になるプログラムは製品としておかしい!」
という、ある意味至極もっともなご意見を頂いたわけです。
いや、それで正しいんだよと、説明しようにも、
そこそこPCに詳しいデバッガーさんが理解できなかった時点で
お客様への理解もされないだろうなと言うことで、
前者の方式になるようにプログラムの組み直しをしました。
で!何が言いたいかというと、
あれやれ!これやれ!と指示を受けて作業する仕事と、
今これに集中しないと!で偶にインタラプトされる仕事と、
仕事にも色々あるなぁということです。
効率は後者の方が良いけれど、自分の処理能力が追いつかないと、
インタラプトされたことに気がつかず怖いなーと