• ベストアンサー

処理の実行と平行した時間の計測。計測結果による切り替え判断になります

C++で次のようなソースを書こうと考えていますが、 全くに、具体的なやり方のイメージが出てこず、 アドバイスいただきたく思い、 質問させてもらうことにしました。 =========================== (A) ↓ (B) ある検索処理が実行される ↓ (C) ↓ (D) ↓ (E) =========================== (B)がいくらか処理時間の要する内容なのですが、 (B)を実行している際に、 決められた一定の時間が経過した場合は、 進行中の(B)の処理を中断し、 (D)へ飛んでしまいたいと思っています。 (B)の処理が開始された段階で、 時間の計測も平行し実行され、 その経過時間が、 例えば10秒を超えてしまった段階で、 すぐに、(B)を中断し、 (D)に実行処理を移動させる感じです。 分からないだけに、 適切なキーワードが悪かったりするのか、 意図するページを検索することが出来ず、 質問させていただきます。 参考になるソースでも解説でも、 何でも結構ですので、 アドバイスいただけると、 大変ありがたい次第です。 開発環境はFedora9です。 どうぞ宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

Fedoraということはgccですね。 基本的な方法は2通り。 1. (B)内で、time(2)等利用して、時間を意識しつつループを行う。 2. シグナルを利用する っていうことで、 おすすめは 1. 一般的には、alarm(2)が簡単ではないかなと。 あとは、マルチスレッドにして、select(2)と混ぜるなんて技もあるかもしれませんが、 いろいろあるので、まずはalarm()で、シグナルについて調べるところから やるとよいと思います。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/alarm.2.html
shuichi501
質問者

お礼

tsuduki999さん ご回答いただきましてありがとうございました。 アドバイスいただいたとおりでして、 alarm()にて、 意図を満たせる感じでした。 ありがとうございました!

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

(A)とか(B)はスレッドですか、プロセスですか? いずれにせよハンドルが違うだけですが、強制終了の方法が異なるのと、 スレッドを強制終了する場合、同一プロセスの動作が不安定になるという 危険があります。 プロセスが終わるかタイムアウトになるまで待つというのでしたら、 WaitForSingleObjectを使うのが一般的でしょうか。 http://msdn.microsoft.com/ja-jp/library/cc429427.aspx

shuichi501
質問者

お礼

nda23さん ご回答いただきましてありがとうございました! 今回は、alarm()で対応してしまいましたが、 nda23さんの内容に関しても、 大変、参考になりました。 ありがとうございました!

関連するQ&A