我需要在我的代码中使用一些定时器。我有这样的事情:Linux定时器CLOCK_PROCESS_CPU_ID不起作用
struct sigevent ec;
ec.sigev_notify = SIGEV_THREAD;
ec.sigev_value.sival_ptr = &c_timer;
ec.sigev_notify_function = c_thread;
ec.sigev_notify_attributes = NULL;
secs = floor(c);
nsecs = (long long) SECOND * (c - secs);
printf("%ds\t%lldns\n\n",secs,nsecs);
it1c.it_value.tv_sec = secs;
it1c.it_value.tv_nsec = nsecs;
it1c.it_interval.tv_sec = 0;
it1c.it_interval.tv_nsec = 0;
timer_create(CLOCK_PROCESS_CPUTIME_ID, &ec, &c_timer);
timer_settime(c_timer, 0, &it1c, NULL);
哪里c_thread是一些简单的函数,它是设置新的计时器,第二个是:
#define SECOND 1000000000
c是类似2.25
而且我的问题是该计时器在它应该时不会调用c_thread。当我将CLOCK_PROCESS_CPUTIME_ID更改为CLOCK_REALTIME时,一切正常,并且被调用,但是当我使用第一个时没有任何反应。我还使用其他具有clock_gettime函数的CLOCK_REALTIME计时器检查CLOCK_PROCESS_CPUTIME_ID,并且时钟值达到我的it_value。
任何想法可能是错的?
而我的第二个问题:是否有任何方法将某些参数传递给使用定时器称为线程的函数?
请给出一个[MCVE]。 'CPUTIME'指示进程消耗多少CPU时间(说明明显)。如果你的程序进入休眠状态,那么它将永远达不到2.5秒的CPU时间。所以我们需要在设置定时器之后看看程序还有什么功能。 – kaylum