プロが教えるわが家の防犯対策術!

GTKでGTKのシグナルではなく、OSのシグナルを使いたいのですが、
gtk_main()が内部処理をしている間にシグナルを受信してしまうと、ディスプレイへの描画が停止し最終的にはプログラムが落ちます。
これをどうにかしたいのですが、いい方法はないでしょうか?

開発はCで行っています。


ちなみやりたいことは、
外部プロセスにて画像データを共有メモリに配置して、シグナルを受信した時にその共有メモリからデータを取得し、表示したいです。

現状では、平均で40秒ぐらいは動作しますが内部処理中にシグナルを受信すると止まってしまう様です。



ご教授願います。

A 回答 (2件)

御存知でしょうが、sigaction() とか signal() のハンドラ内で安全に使えるシステムコールは一部のみです。

まあ OS にも依るのですが、なので一般的にハンドラではフラグ立てするなどの最小限の処理に留め、実際の処理本体は安全はタイミングで実行するのがいいです。

あと案外ありえるのがハンドラ内で errno 壊してるとかいうケアレスミス。コードレビューしてても時々見掛けます。

この回答への補足

ご回答ありがとうございます。
一度フラグ立てのみをハンドラに入れて、あとはアイドリングタイムに組み込んでみます。

補足日時:2010/12/26 20:02
    • good
    • 0
この回答へのお礼

解決に向かいつつあります。
ありがとうございました。

お礼日時:2010/12/27 22:55

プログラムの構成が良くわかりませんので、的外れかもしれませんが、


1.gtk_main()の呼び出しの前に、今回のシグナルのマスクをする
2.gtk_main()の呼び出し
3.今回のシグナルのマスクの解除
4.今回のシグナルの処理
では、だめなのでしょうか。
上記のようにすることにより、
gtk_main()の実行中は、今回のシグナルを受けても、それをガードできます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
gtk_main()中にシグナルを受けないようにしてしまうと意味がありません。
質問文読みにくくてすみません。

お礼日時:2010/12/26 19:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!