c 定時器實現

2021-07-22 16:13:31 字數 1320 閱讀 3108

1. setitimer方法

nginx 實現, 在這段**中,定義了itimerval的資料結構,並設定這個資料結構的值,從而定時器的間隔時間,settimer的函式第乙個引數表示經過timer就會觸發sigalarm事件, 然後註冊了訊號sigalarm的事件,從而觸發定時器

signal(sigalrm, printmsg);  

void printmsg(int num)

struct itimerval itv;

itv.it_interval.tv_sec = ngx_timer_resolution / 1000

;itv.it_interval.tv_usec = (ngx_timer_resolution % 1000) * 1000

itv.it_value.tv_sec = ngx_timer_resolution / 1000

;itv.it_value.tv_usec = (ngx_timer_resolution % 1000 ) * 1000

; if (setitimer(itimer_real, &itv, null) == -1)

2. pthread_mutex_timedlock
pthread_mutex_trylock(&wakelock)

while(pthread_mutex_timedlock(&wakelock, &ts) != 0)

3. epoll_wait實現

可以設定epoll_wait的timeout從而達到定時器,epoll等待timeout秒之後就執行後面的程式

int epoll_wait(int efd, struct epoll_event *event, int maxeevents, int timeout)

//efd 由epoll_create建立的fd

//timeout 為一次監聽的間隔

//當有事件觸發 返回int 表示事件個數,event裡儲存的是觸發的事件

模擬定時器寫的乙個**

#include

#include

#include

#include

#include

#include

#include

#define max_events 100

void printmsg(int num)

int main()

}

簡單定時器實現

經常會遇到這樣的功能,需要開闢乙個執行緒同時迴圈的跑乙個任務,下面是簡單實現的 呼叫select 加超時時間 include include include include include void thread client timeout const void arg printf time o...

golang定時器實現

golang定時器,需求是能夠在指定時間後停止。或某種條件出發停止。好,下面上貨。package main import context fmt sync time func main func stoptheworld func goclock for func goclock2 執行結果 123...

C 定時器同步

在寫應用程式中經常需要使用到時間間隔迴圈,這時,我們經常會考慮使用定時器。c 為我們提供了多種定時器的解決方法,有timer控制項,thread.timer.以及timers.timer 這裡只做了timer控制項和timers.timer的對比。前者使用方便操作靈活,在事件響應函式中可以對其他控制...