X-Window
OSF/Motifプログラミング
著 者:兜木昭男、木下凌一、栄谷政己、林秀幸、安川悦子
発 行:日刊工業新聞社
発行日:1990年10月20日 初版発行
定 価:3500円
サイズ:B5版 386ページ
ISBN 4-526-02808-8
本書は、Motifに関する素晴らしい入門書であり、私がまだ、毎日Motifのプ ログラムを作っていたころ、常に座右に置いて利用していた本である。
本書の特徴は、何といっても見開き2ページが基準になっていることであり、 多くのセクションがこの2ページに収まっている。そうでない場合でも、ほと んどの場合2の倍数のページ数にしてあり、非常に見やすい。
さらに、各セクションが2ページか4ページであり、その中に、取り上げた テーマだけを確認するための簡潔なプログラムが示されている。もう少し詳し くセクションの構成を解説すると、
本書の一番優れている点、他書では見られない点は、例題のプログラムの簡 潔さである。必要以上のことをしていないのが素晴らしい。余分なことをして いないので、自分のプログラムに応用しやすいのである。この部分は、あらゆ るプログラミングの本、特にライブラリの解説本の鑑と言っても良い。
もちろん、本書は入門書というか、初心者用というかで、Motifの全部の機 能を解説したものではない。抜けはいくらでもあるが、そういう人のためには 分厚いマニュアルが待っている。
さて、このように素晴らしい本なのであるが、 「うそっー」 と叫んでしまうような個所もあった。
§108/2つのトップレベルを作るには
の中で、複数のウィンドウを1つのプログラムから起動しているのであるが、 そのためのイベント処理が次のようになっているのである。
while(True) {
if( XtAppPending(app1) ) {
XtAppNextEvent(app1,&event1);
XtDispatchEvent(&event1);
}
if( XtAppPending(app2) ) {
XtAppNextEvent(app2,&event2);
XtDispatchEvent(&event2);
}
}
(1994年7月15日初版7刷より)
各アプリケーションコンテキストに対し、ペンディングになっていたらその
イベントを処理することを繰り返しているのである。だから、もちろん、この
プログラムはちゃんと動く。
でも、滅茶苦茶に問題あるコーディングなのである。
XtMailLoop()またはXtAppMainLoop()の代わりに自分でMailLoopを作ったの であるが、上のようにしていると、whileループをガンガン回り続けるのであ る。あまりにもガンガン回り続ける。とりわけ、何のイベントも来ないとき、 ますます良く回り、CPUパワーを食い潰すのである。
私も、そのように、1つのアプリケーションで複数のウィンドウを作りたく て、本書のこのセクションを参考にしようとした。そして、まずは実験という ことで、本書のプログラムを入力して試したのである。そして、 「ひぇーっ」 と、予想通りになったのである。
Xなどのウィンドウシステムでは、殆んどのものがイベント駆動で動いてい る。だから、そのイベントの処理には細心の注意が必要だ。できることなら、 自分で処理をしない方が良い。XおよびMotifの場合、色々な関数が腐る程用意 されているので、大抵の場合、自分の要求を満たすものがあるので、それを見 つける努力をするのがベストであろう。
まあ、私ごときの初心者は、イベントなどという危険物には近寄らない方が 身の為である。