Я реализовал таймер для приложения пользовательского пространства 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.
Все, что должен сделать обработчик сигнала, это установить флаг, на который будет действовать код без прерываний.
Хотя я до сих пор не знаю, что на самом деле происходит, когда сообщение исчезает ..