日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux两种定时器

發(fā)布時(shí)間:2023/12/10 linux 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux两种定时器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Linux下的定時(shí)器有兩種,以下分別介紹:
 
  1、alarm
 
  如果不要求很精確的話,用alarm()和signal()就夠了
 
  unsigned int alarm(unsigned int seconds)
 
  函數(shù)說明: alarm()用來設(shè)置信號SIGALRM在經(jīng)過參數(shù)seconds指定的秒數(shù)后傳送給目前的進(jìn)程。如果參數(shù)seconds為0,則之前設(shè)置的鬧鐘會被取消,并將剩下的時(shí)間返回。
 
  返回值: 返回之前鬧鐘的剩余秒數(shù),如果之前未設(shè)鬧鐘則返回0.
 
  alarm()執(zhí)行后,進(jìn)程將繼續(xù)執(zhí)行,在后期(alarm以后)的執(zhí)行過程中將會在seconds秒后收到信號SIGALRM并執(zhí)行其處理函數(shù)。
 
  

#include <stdio.h>

#include <time.h>

#include <sys/time.h>

#include <stdlib.h>

#include <signal.h>

?

void sigalrm_fn(int sig)

{

printf("alarm!\n");

alarm(2);

return;

}

?

int main(void)

{

signal(SIGALRM, sigalrm_fn);

alarm(1);

while(1) pause();

}

?


  2、setitimer()
  int setitimer(int which, const struct itimerval *value, struct itimerval*ovalue));
  setitimer()比alarm功能強(qiáng)大,支持3種類型的定時(shí)器:
  ITIMER_REAL : 以系統(tǒng)真實(shí)的時(shí)間來計(jì)算,它送出SIGALRM信號。
  ITIMER_VIRTUAL : -以該進(jìn)程在用戶態(tài)下花費(fèi)的時(shí)間來計(jì)算,它送出SIGVTALRM信號。
  ITIMER_PROF : 以該進(jìn)程在用戶態(tài)下和內(nèi)核態(tài)下所費(fèi)的時(shí)間來計(jì)算,它送出SIGPROF信號。
  setitimer()第一個(gè)參數(shù)which指定定時(shí)器類型(上面三種之一);第二個(gè)參數(shù)是結(jié)構(gòu)itimerval的一個(gè)實(shí)例;第三個(gè)參數(shù)可不做處理。
  setitimer()調(diào)用成功返回0,否則返回-1.
  下面是關(guān)于setitimer調(diào)用的一個(gè)簡單示范,在該例子中,每隔一秒發(fā)出一個(gè)SIGALRM,每隔0.5秒發(fā)出一個(gè)SIGVTALRM信號:
 
  

#include <stdio.h>

#include <time.h>

#include <sys/time.h>

#include <stdlib.h>

#include <signal.h>

?

int sec;

?

void sigroutine(int signo){

?

switch (signo){

?

case SIGALRM:

?

printf("Catch a signal -- SIGALRM \n");

?

signal(SIGALRM, sigroutine);

?

break;

?

case SIGVTALRM:

?

printf("Catch a signal -- SIGVTALRM \n");

?

signal(SIGVTALRM, sigroutine);

?

break;

?

}

?

return;

?

}

?

int main()

?

{

?

struct itimerval value, ovalue, value2; //(1)

?

sec = 5;

?

printf("process id is %d\n", getpid());

?

signal(SIGALRM, sigroutine);

?

signal(SIGVTALRM, sigroutine);

?

value.it_value.tv_sec = 1;

?

value.it_value.tv_usec = 0;

?

value.it_interval.tv_sec = 1;

?

value.it_interval.tv_usec = 0;

?

setitimer(ITIMER_REAL, &value, &ovalue); //(2)

?

value2.it_value.tv_sec = 0;

?

value2.it_value.tv_usec = 500000;

?

value2.it_interval.tv_sec = 0;

?

value2.it_interval.tv_usec = 500000;

?

setitimer(ITIMER_VIRTUAL, &value2, &ovalue);

?

for(;;)

?

;

?

}

總結(jié)

以上是生活随笔為你收集整理的Linux两种定时器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。