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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

linux

linux定时器错误使用,linux下定时器的使用

發(fā)布時(shí)間:2024/7/19 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux定时器错误使用,linux下定时器的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Linux下定時(shí)器的使用主要用到兩個(gè)函數(shù):setitimer()和getitimer();

注意:setitimer()一個(gè)進(jìn)程中只能有一個(gè),下一個(gè)會(huì)覆蓋前一個(gè)的定時(shí)。

Linux系統(tǒng)給每個(gè)進(jìn)程提供了3個(gè)定時(shí)器,每個(gè)定時(shí)器在各自不同的域里面計(jì)數(shù),當(dāng)任何一個(gè)timer計(jì)數(shù)結(jié)束了,系統(tǒng)就發(fā)一個(gè)信號(hào)(signal)給該進(jìn)程,同時(shí)計(jì)數(shù)器重置。

以下是支持的三種計(jì)數(shù)器形式:

1、ITIMER_REAL ? ? ? ? 在real ?time中計(jì)數(shù)器減1,然后等計(jì)數(shù)往比后發(fā)送SIGALRM信號(hào)。

2、ITIMER_VIRTUAL ? ?當(dāng)進(jìn)程在執(zhí)行的過(guò)程中計(jì)數(shù),然后當(dāng)計(jì)數(shù)完畢后發(fā)送SIGVTALRM信號(hào)給該進(jìn)程。

3、ITIMER_PROF ? ? ? ??在該進(jìn)程被執(zhí)行和系統(tǒng)在代表該進(jìn)程執(zhí)行的時(shí)間都進(jìn)行計(jì)數(shù)。

getitimer()/setitimer()功能描述:

獲取或設(shè)定間歇計(jì)時(shí)器的值。系統(tǒng)為進(jìn)程提供三種類型的計(jì)時(shí)器,每一類以不同的時(shí)間域遞減其值。當(dāng)計(jì)時(shí)器超時(shí),信號(hào)被發(fā)送到進(jìn)程,之后計(jì)時(shí)器重啟動(dòng)。

用法:

#include

int getitimer(int which, struct itimerval *value);

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

參數(shù):

which:間歇計(jì)時(shí)器類型,有三種選擇

ITIMER_REAL //數(shù)值為0,計(jì)時(shí)器的值實(shí)時(shí)遞減,發(fā)送的信號(hào)是SIGALRM。

ITIMER_VIRTUAL //數(shù)值為1,進(jìn)程執(zhí)行時(shí)遞減計(jì)時(shí)器的值,發(fā)送的信號(hào)是SIGVTALRM。

ITIMER_PROF //數(shù)值為2,進(jìn)程和系統(tǒng)執(zhí)行時(shí)都遞減計(jì)時(shí)器的值,發(fā)送的信號(hào)是SIGPROF。

value,ovalue:時(shí)間參數(shù),原型如下

struct itimerval

{

struct timeval it_interval;

struct timeval it_value;

};

struct timeval

{

long tv_sec;

long tv_usec;

}; getitimer()用計(jì)時(shí)器的當(dāng)前值填寫(xiě)value指向的結(jié)構(gòu)體。

setitimer()將value指向的結(jié)構(gòu)體設(shè)為計(jì)時(shí)器的當(dāng)前值,如果ovalue不是NULL,將返回計(jì)時(shí)器原有值。

返回說(shuō)明:

成功執(zhí)行時(shí),返回0。失敗返回-1,errno被設(shè)為以下的某個(gè)值

EFAULT:value或ovalue是不有效的指針

EINVAL:其值不是ITIMER_REAL,ITIMER_VIRTUAL 或 ITIMER_PROF之一。

舉例說(shuō)明:

#include#include#include#include#include#includevoidPrintMsg(intNum)

{

printf("%s/n","Hello?World");return;

}intmain(intargc,char*argv[])

{

signal(SIGALRM,?PrintMsg);structitimerval?tick;

tick.it_value.tv_sec=10;//十秒鐘后將啟動(dòng)定時(shí)器tick.it_value.tv_usec=0;

tick.it_interval.tv_sec=1;//定時(shí)器啟動(dòng)后,每隔1秒將執(zhí)行相應(yīng)的函數(shù)tick.it_interval.tv_usec=0;//setitimer將觸發(fā)SIGALRM信號(hào)intret=setitimer(ITIMER_REAL,&tick,?NULL);if(?ret!=0)

{

printf("Set?timer?error.?%s?/n",?strerror(errno)?);return-1;

}

printf("Wait!/n");

getchar();return0;

}

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的linux定时器错误使用,linux下定时器的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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