为什么在创建posix计时器时使用sleep?

时间:2014-02-11 01:02:51

标签: c++ multithreading posix

我正在尝试了解posix的计时器。我使用linux手册页作为示例。手册页创建计时器然后使用睡眠使计时器进入睡眠状态。如果你使用睡眠,为什么要创建计时器?以下是手册页中的代码

    if (timer_create(clockid, &sev, &timerid) == -1) {
    errExit("timer_create");
}



freq_nanosecs = atoll(argv[2]);
       its.it_value.tv_sec = freq_nanosecs / 1000000000;
       its.it_value.tv_nsec = freq_nanosecs % 1000000000;
       its.it_interval.tv_sec = its.it_value.tv_sec;
       its.it_interval.tv_nsec = its.it_value.tv_nsec;

       /* Sleep for a while; meanwhile, the timer may expire
          multiple times */
 if (timer_settime(timerid, 0, &its, NULL) == -1)
     errExit("timer_settime");


       printf("Sleeping for %d seconds\n", atoi(argv[1]));
       sleep(atoi(argv[1]));

1 个答案:

答案 0 :(得分:1)

因为如果你的程序没有其他任何事情要做(即没有主事件循环),那么它一旦到达该块的结尾就会退出。如果你注释掉sleep(),它就会马上退出。

你可以用while(1)代替sleep(atoi(argv [1]));

基本上,您的程序已经没有运行指令了。定时器通常用于信令操作以异步方式发生的事情。例如,您可以设置计时器以向您的进程发送信号并设置信号处理程序来处理该事件。

我会说看看timer_create(2)更清晰,但看起来你直接粘贴了一些代码。