#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
using namespace std;
int count = 0;
void alarm2(int signo)
{
cout << count;
}
void alarm1(int signo)
{
signal(SIGALRM, alarm2);
cout << "ctrl+C";
alarm(10);
sleep(10);
}
int main()
{
signal(SIGALRM, alarm1);
alarm(3);
sleep(5);
}
我希望3秒後我得到消息「ctrl + C」,然後另一個鬧鐘設置爲10秒;之後我應該得到count
的價值。但是當我在10秒後運行時,我得到了「ctrl + C」和值count
。在Unix中結束兩個報警信號並計數SIGINT
使用暫停(),不標記C#,不要在信號處理程序使用COUT。 –
爲什麼我不應該使用cout並且在哪裏使用暫停() –
您在'cout'調用之後沒有發送換行符,並且您沒有明確地刷新輸出結果......您之後只能看到輸出,因爲您的程序終止導致緩衝區刷新。此外,你的第一個信號處理程序中的睡眠是一件可怕的事情;擺脫它! (也許把它移到主)。 – mah