2

SIGVTALRMによって送信されたをキャッチしようとしsetitimerていますが、なぜ機能しないのかわかりません。ここに私のコードがあります:

void time(int time) {
    cout << "time" << endl;
    exit(0);
}

int main(void) {
    signal(SIGVTALRM, time);
    itimerval tv;
    tv.it_value.tv_sec = 5;
    tv.it_value.tv_usec = 0;
    tv.it_interval.tv_sec = 5;
    tv.it_interval.tv_usec = 0;
    setitimer(ITIMER_VIRTUAL, &tv, NULL);
    while (true) {
        cout << "waiting" << endl;
    }
    return 0;
}

なんらかの理由で呼び出さtime()れません-シグナルをキャッチしないためか、最初にシグナルが送信されなかったためか、わかりません。

それはかなり単純なはずです。何か案は?ありがとう

4

2 に答える 2

0

動作していませんか?

私にはすべてがうまく見えます。あなたは十分に待っていないかもしれません。ループ内で文字列waitingを出力していて、仮想タイマーを使用しているため、結果として、プロセスが実行されたときにのみクロックが刻みます (IO 時間は含まれません)。したがって、実際には、タイマーは数秒 (>5) 秒後に期限切れになる可能性があります。

印刷部分をコメントアウトしてみてください。

于 2012-04-26T10:05:16.610 に答える