Solarisプログラミング教えてチョンマゲ (337レス)
Solarisプログラミング教えてチョンマゲ http://mevius.5ch.net/test/read.cgi/unix/1011459395/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
191: 名無しさん@お腹いっぱい。 [] 04/06/14 00:17 処理時間が一定時間を越えた場合には、強制終了するように、スレッドとシグナルを使って、 以下のようなプログラムを組んでいます。 しかし、シグナルハンドラを無視(起動しない)もしくはシグナルの無効化ができません。 どうしたらよいでしょうか? ・初期設定 ・スレッドA起動 ( ---> シグナルハンドラ(SIGALRM)設定、インターバルタイマーセット ) ( ---> タイマー待ち ---> 時間が来たらハンドラ起動 ---> ハンドラ(abortで強制終了) ) ・処理B ・処理Bが時間内に終了 ・スレッドA終了処理 ( シグナルハンドラを再設定 ---> インターバルタイマーリセット ) ( スレッドAをキャンセル ) ・処理続行 このとき、シグナルハンドラの再設定し、スレッドAを終了させると、ALARM CLOCKで終了。 スレッドAを終了させて、なおかつ、ハンドラを起動させないようにするためにはどうしたら いいか教えてください。 なんか、Solarisの中味(システムコール?)について、よくわかってないので、変なこと書いてる かもしれませんが、よろしくお願いします。 http://mevius.5ch.net/test/read.cgi/unix/1011459395/191
192: 名無しさん@お腹いっぱい。 [sage] 04/06/14 14:27 >>191 そのスレッドAってのは時間監視だけしてるの? それとも処理BってのもスレッドAの仕事? 時間監視だけなら、シグナル使わないでスレッドAをその時間だけ眠らせておけばいいんでない? http://mevius.5ch.net/test/read.cgi/unix/1011459395/192
193: 名無しさん@お腹いっぱい。 [sage] 04/06/14 21:40 >>192 > >>191 > そのスレッドAってのは時間監視だけしてるの? それとも処理BってのもスレッドAの仕事? > 時間監視だけなら、シグナル使わないでスレッドAをその時間だけ眠らせておけばいいんでない? そうしておいて、B側で処理が間に合ったらフラグをセットして、スリープから起きてきたA側がそのフラグをチェックすればいいんじゃないのかな? http://mevius.5ch.net/test/read.cgi/unix/1011459395/193
194: 191 [] 04/06/14 23:39 レスありがとう。 >192,193 スリープでもいいかなと思って、暫定的にそのような処理にして、動かしていました。 しかし、他にもいくつかのスレッドが立ち上がっており、タイマー待ちができない状態になりました。 結局、なんとか今日解決したのですが、どのようにしたかというと、以下のような感じです。 (SIGALRMは他のスレッドで使用するため、ほかのシグナル(SIGUSR1)に変更することになりました) スレッドAは時間監視セット処理のみ行う。 処理Bはタイマーによって監視され、一定時間経過したら、ハンドラによって強制的にプロセスごと終了させられる。 ・初期設定 ・スレッドA起動 ( ---> シグナルハンドラ(SIGUSR1)設定、timer_create(TimerID), timer_settime() -----> スレッドA終了) ( 時間が来たらハンドラ起動 ---> ハンドラ(終了処理後、abortで強制終了) ) ・処理B ・処理Bが時間内に終了 ・タイマー削除処理(timer_delete(TimerID)) ・処理続行 以上、こんな感じです。 ありがとうございました。 http://mevius.5ch.net/test/read.cgi/unix/1011459395/194
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.018s