Тревога () останавливается случайно через некоторое время - PullRequest
0 голосов
/ 15 ноября 2018

Я реализовал таймер для приложения пользовательского пространства 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.

Все, что должен сделать обработчик сигнала, это установить флаг, на который будет действовать код без прерываний.

Хотя я до сих пор не знаю, что на самом деле происходит, когда сообщение исчезает ..

...