シンプル・ランチャー C言語版 バグ修正

前回のプログラムを使っていて、時々メニューから選んだプログラムが実行されない事があるのに気づき、調べていましたが、結果、system()関数で起動される前にmodsプログラムが終了してしまうって辺りが原因のようでした。

usleep()でwaitを入れたりしましたが、あまり美しくないですよね。環境に依存しそうですし。SIGCHLD をハンドリングすれば大丈夫な事は試して分かりました。しかし、メニューから選んだ後の挙動で、何となく軽さが阻害された気がします。別に計測したわけではなく感覚なのですが、メニューが表示されなくなる迄の時間が伸びたようです。
なんとかならないか、と調べていたら、system()関数は内部的にはexecl()関数を呼んでいるらしく、これを直接呼べば、SIHCHLD をハンドリングしなくても良さそうな事が分かりました。exec〜()関数は、OS/2を使っている頃から避けてきていたのですが、メリットがありそうなので、使ってみる事にしました。結果、問題はないようですね。余分な処理をしていない分、実感できないレベルでしょうが、以前よりも軽くなっているはずです。Linux ではexec〜()関数を避けずに使って行こうと思います。

一応、ソースの中で、「#define USE_EXECL」をコメントアウトすれば、system()関数+SIGCHLDで処理するようにしています。

それ以外の変更点は、次です。

  1. Gtk+3系を使っても、Makeできるようにした
  2. リストの項目移動に、右矢印や、左矢印、Ctrl+n/p/f/b を使えるようにした
  3. 起動時の引数で、”–version”、”–help”を取り敢えず使えるようにした

ちなみに、使っているMakefileは次です。

Makefile内の「gtk+-3.0」を「gtk+-2.0」にする事で、正しく構成されていれば、Gtk+2を使用するはずです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA