--
-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 ...