我使用一种旧的方式为Linux用户空间应用程序实现了一个计时器。
int main(){
//do some things
signal(SIGALRM, do_things);
alarm(1);
while(1) {
//other things
}
}
void do_things()
{
tic++;//global variable
printf("time: %d...", tic);
if (tic%30 == 0) {
printf("hha\n ");
do_calculation();
}
alarm(1);
}
它运行随机的时间并停止打印任何内容,该应用程序仍然有效,但我的计时器似乎消失了。我不知道应该从哪里开始检查。任何建议表示赞赏。
编辑:做了一些谷歌搜索,信号处理程序不应该包含“业务逻辑”或进行诸如printf之类的库调用。
所有信号处理程序应该做的是设置一个要由非中断代码执行的标志。
尽管我仍然不知道导致消息消失的真正原因是什么。