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