【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

C++で次のようなソースを書こうと考えていますが、
全くに、具体的なやり方のイメージが出てこず、
アドバイスいただきたく思い、
質問させてもらうことにしました。

===========================
(A)

(B) ある検索処理が実行される

(C)

(D)

(E)
===========================

(B)がいくらか処理時間の要する内容なのですが、
(B)を実行している際に、
決められた一定の時間が経過した場合は、
進行中の(B)の処理を中断し、
(D)へ飛んでしまいたいと思っています。


(B)の処理が開始された段階で、
時間の計測も平行し実行され、
その経過時間が、
例えば10秒を超えてしまった段階で、
すぐに、(B)を中断し、
(D)に実行処理を移動させる感じです。

分からないだけに、
適切なキーワードが悪かったりするのか、
意図するページを検索することが出来ず、
質問させていただきます。

参考になるソースでも解説でも、
何でも結構ですので、
アドバイスいただけると、
大変ありがたい次第です。

開発環境はFedora9です。
どうぞ宜しくお願い致します。

A 回答 (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/man …
    • good
    • 0
この回答へのお礼

tsuduki999さん

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

お礼日時:2009/04/20 17:57

(A)とか(B)はスレッドですか、プロセスですか?


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

nda23さん

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

ありがとうございました!

お礼日時:2009/04/20 17:59

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


おすすめ情報