0

cでタイムアウトメカニズムを実装しようとしています。特定の関数を 15 秒間実行したいのですが、実行時間が 15 秒を超えた場合、プログラムは終了する必要があります。

例えば:

void somefunction()
{
//------------
}
void main()
{
 somefunction();//this function should have execution time of 30 seconds.
 //If it takes more than 30 seconds it should timeout and pop and error.

 }
4

2 に答える 2

3

これは強制的なタイムアウトであり、Unix を使用しているとコメントしたので...

1) 初期化で、SIGALRM シグナルのシグナルハンドラを宣言します。このシグナル ハンドラは を呼び出しますlongjmp()

2) 関数に入る直前に、 を呼び出しsetjmp()てジャンプ ポイント ( 用) を設定し、タイムアウト期間用にlongjmp()をインストールします。alarm()

3) setjmp()0 を返す場合は、somefunction() を呼び出します。ゼロ以外が返された場合 (lonjmp を呼び出すときに制御できます)、タイムアウトしたことがわかります。

より詳細な情報については、「man alarm」、「man longjmp」、「man setjmp」、「man signal」を参照してください。

于 2013-07-07T11:59:46.217 に答える