#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