posix timer引數理解與簡單使用示例

2021-10-17 03:14:06 字數 3430 閱讀 6616

--

-clock_id說明定時器是基於哪個時鐘的,clock_id取值為以下:

clock_realtime :systemwide realtime clock.

clock_monotonic:represents monotonic time. cannot be set.

clock_process_cputime_id :high resolution per-process timer.

clock_thread_cputime_id :thread-specific timer.

clock_realtime_hr :high resolution version of clock_realtime.

clock_monotonic_hr :high resolution version of clock_monotonic.---

struct sigevent

union si**al

- sigev_notify:

sigev_none:什麼都不做,只提供通過timer_gettime和timer_getoverrun查詢超時資訊

sigev_signal: 當定時器到期,核心會將sigev_signo所指定的訊號傳送給程序。在訊號處理程式中,si_value會被設定會sigev_value

sigev_thread: 當定時器到期,核心會(在此程序內)以sigev_notification_attributes為執行緒屬性建立乙個執行緒,並且讓它執行sigev_notify_function,傳入sigev_value作為為乙個引數

- si**al:

如果幾個定時器產生了同乙個訊號,處理程式可以用 sigev_value來區分是哪個定時器產生了訊號。要實現這種功能,程式必須在為訊號安裝處理程式時,使用struct sigaction的成員sa_flags中的標誌符sa_siginfo---

*timerid裝載的是被建立的定時器的id

啟動乙個定時器:

int

timer_settime

(timer_t timerid, \

int flags, \

const

struct itimerspec *value, \

struct itimerspect *ovalue)

;

引數解釋:

--

-如果flags的值為timer_abstime,則value所指定的時間值會被解讀成絕對值(此值的預設的解讀方式為相對於當前的時間)。這個經修改的行為可避免取得當前時間、計算「該時間」與「所期望的未來時間」的相對差額以及啟動定時器期間造成競爭條件。---

struct itimespec

;struct timespec

; it_value用於指定當前的定時器到期時間。當定時器到期,it_value的值會被更新成it_interval 的值。如果it_interval的值為0,則定時器不是乙個時間間隔定時器,一旦it_value到期就會回到未啟動狀態---

如果ovalue的值不是null,則之前的定時器到期時間會被存入其所提供的itimerspec。如果定時器之前處在未啟動狀態,則此結構的成員全都會被設定成0

編譯時 需加上 -lrt

使用示例1:新執行緒派駐方式

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

void

timer_thread

(union si**al v)

intinit_timer

(timer_t *timerid,

struct sigevent *evp,

struct itimerspec *it)

printf

("timer_create timerid = %d\n"

,*timerid)

; it-

>it_interval.tv_sec =1;

// 後續按照該時間間隔

it->it_interval.tv_nsec =

0;

it->it_value.tv_sec =3;

// 最初開始時間間隔

it->it_value.tv_nsec =0;

return0;

}int

start_timer

(timer_t *timerid,

struct itimerspec *it)if(

timer_settime

(*timerid,

0, it,

null)==

-1)return0;

}void

*thread_func

(void

*param)

*a =

100;

printf

("param = %d\n"

,*a);}

intmain

(int argc,

const

char

*ar**)

#endif

if((pid =

fork()

)<0)

else

if( pid ==0)

sleep(2

);printf

("child timer_id addr = %d\n"

, timerid)

;start_timer

(&timerid,

&it)

;sleep(10

);exit(0

);}else

else

if(ret == pid)

else

printf

("something error\n");

}while

(ret ==0)

;/*ret = waitpid(pid, null, 0);*/

/*if (ret == pid)*/

/*printf("successly get child %d\n", pid);*/

}pause()

;return0;

}

使用示例2:通知方式為訊號(signal)

#include

#include

#include

#include

void

handle

(int sig_num)

intmain()

backlog引數理解

listen函式把乙個由socket函式建立的套接字轉換成乙個被動套接字,指示核心接受指向該套接字的連線請求。該套接字也由closed狀態轉換到listen狀態。函式原型 include int listen int sockfd,int backlog 成功返回0,失敗返回 1。listen之後核...

電感引數理解

1.電感的q值 電感的q值,也叫做電感的品質因素,是衡量電感器件的主要引數。指電感器在某一頻率的交流電壓工作下,所呈現的感抗與其等效損耗電阻之比。電感器的q值越高,損耗越小,效率越高。電感的q值與線圈導線的直流電阻 線圈骨架的介質損耗及鐵心 遮蔽罩等引起的損耗等有關。2.電感q值的換算 1 q 2p...

Python引數理解

def power x x 必選引數 return x 2def power x,n 2 n 預設引數 return x n即傳入的引數個數是可變的 def calc numbers numbers 可變引數 print numbers sum 0 for n in numbers sum sum ...