Функция опроса таймера в C


Я реализована функция опроса с таймером в C, что каждые 10 секунд проверяет заданное условие (я просто заменил его на входе в stdout для тестовых целей), но хотелось бы узнать ваше мнение на этот код, а именно, если есть более простой способ достичь того же результата, какие вопросы могут возникнуть в отношении производительности, безопасности потоков, памяти. Я заинтересован в письменном виде наиболее простой, правильный и быстрый код для этого. Предложения, как всегда, приветствуются.

/* includes removed for clarity */

void signalAlarmHandler(int signum) {
  switch(signum) {
  case SIGINT:
    fprintf(stdout, "received interrupt. going to exit.\n");
    exit(0);
    break;
  case SIGALRM:
    fprintf(stdout, "received signal alarm.\n");
    /* checking for condition here */
    break;
  default:
    break;
  }
}

int main(int argc, char* argv[]) {

  if(initializeEnvironment(argc, argv) == -1) {
    return -1;
  }
  else {

    signal(SIGINT, signalAlarmHandler); /* for testing purposes */
    signal(SIGALRM, signalAlarmHandler);

    fprintf(stdout, "starting the signal alarm stuff\n");
    while(1) {
      alarm(10);
      sleep(20);
    }
  }
}


4135
2
задан 12 сентября 2011 в 01:09 Источник Поделиться
Комментарии
1 ответ

Что является причиной использования сигнализации() с Sleep()? Почему не просто

void sigIntHandler(int signum) {
fprintf(stdout, "received interrupt. going to exit.\n");
exit(0);
}

int main(int argc, char* argv[]) {
if(initializeEnvironment(argc, argv) == -1) {
return -1;
}
signal(SIGINT, signalAlarmHandler); /* for testing purposes */

while(1) {
sleep(10);
/* checking for condition here */
}
}

Также:


  • fprintf () - это не сигнал-безопасный, лучше не использовать его из обработчика сигнала

  • сигнал() является устаревшим и зависящим от реализации, использовать в sigaction() для получения стабильных результатов.

1
ответ дан 12 сентября 2011 в 02:09 Источник Поделиться