我需要在我的代碼中使用一些定時器。我有這樣的事情: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