首页 > 解决方案 > 一段时间后,alarm() 随机停止

问题描述

我使用一种老式的方式为 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。

信号处理程序应该做的就是设置一个标志以由非中断代码执行。

虽然我仍然不知道导致消息消失的真正原因..

标签: clinuxembedded-linux

解决方案


推荐阅读