好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > linux使用select實現(xiàn)精確定時器詳解

linux使用select實現(xiàn)精確定時器詳解

熱門標簽:客服外呼系統(tǒng)怎么樣 華鋒e路航港口地圖標注 河南信譽好的不封卡電話外呼系統(tǒng) 如果做線上地圖標注 揭陽智能電話機器人推薦 地圖標注員都是年輕人 百度地圖標注錯了有責任嗎 打電話機器人接我是他的秘書 江蘇云電銷機器人公司
在編寫程序時,我們經(jīng)常會用到定時器。首先看看select函數(shù)原型如下:
復制代碼 代碼如下:

int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);

參數(shù)說明:
slect的第一個參數(shù)nfds為fdset集合中最大描述符值加1,fdset是一個位數(shù)組,其大小限制為__FD_SETSIZE(1024),位數(shù)組的每一位代表其對應的描述符是否需要被檢查。
select的第二三四個參數(shù)表示需要關注讀、寫、錯誤事件的文件描述符位數(shù)組,這些參數(shù)既是輸入?yún)?shù)也是輸出參數(shù),可能會被內(nèi)核修改用于標示哪些描述符上發(fā)生了關注的事件。所以每次調(diào)用select前都需重新初始化fdset。
timeout參數(shù)為超時時間,該結構會被內(nèi)核修改,其值為超時剩余的時間。
利用select實現(xiàn)定時器,需要利用其timeout參數(shù),注意到:
 1)select函數(shù)使用了一個結構體timeval作為其參數(shù)。
 2)select函數(shù)會更新timeval的值,timeval保持的值為剩余時間。
如果我們指定了參數(shù)timeval的值,而將其他參數(shù)都置為0或者NULL,那么在時間耗盡后,select函數(shù)便返回,基于這一點,我們可以利用select實現(xiàn)精確定時。
timeval的結構如下:
復制代碼 代碼如下:

struct timeval{
long tv_sec;/*secons*
long tv_usec;/*microseconds*/
}

我們可以看出其精確到microseconds也即微妙。
一、秒級定時器
復制代碼 代碼如下:

void seconds_sleep(unsigned seconds){
    struct timeval tv;
    tv.tv_sec=seconds;
    tv.tv_usec=0;
    int err;
    do{
       err=select(0,NULL,NULL,NULL,tv);
    }while(err0 errno==EINTR);
}

 二、毫秒級別定時器
復制代碼 代碼如下:

void milliseconds_sleep(unsigned long mSec){
    struct timeval tv;
    tv.tv_sec=mSec/1000;
    tv.tv_usec=(mSec%1000)*1000;
    int err;
    do{
       err=select(0,NULL,NULL,NULL,tv);
    }while(err0 errno==EINTR);
}

 三、微妙級別定時器
復制代碼 代碼如下:

void microseconds_sleep(unsigned long uSec){
    struct timeval tv;
    tv.tv_sec=uSec/1000000;
    tv.tv_usec=uSec%1000000;
    int err;
    do{
        err=select(0,NULL,NULL,NULL,tv);
    }while(err0 errno==EINTR);
}

現(xiàn)在我們來編寫幾行代碼看看定時效果吧。
復制代碼 代碼如下:

#include stdio.h>
#include sys/time.h>
#include errno.h>
int main()
{
    int i;
    for(i=0;i5;++i){
    printf("%d\n",i);
    //seconds_sleep(1);
    //milliseconds_sleep(1500);
    microseconds_sleep(1900000);
    }
}

 注:timeval結構體中雖然指定了一個微妙級別的分辨率,但內(nèi)核支持的分別率往往沒有這么高,很多unix內(nèi)核將超時值向上舍入成10ms的倍數(shù)。此外,加上內(nèi)核調(diào)度延時現(xiàn)象,即定時器時間到后,內(nèi)核還需要花一定時間調(diào)度相應進程的運行。因此,定時器的精度,最終還是由內(nèi)核支持的分別率決定。
分類: Linux
您可能感興趣的文章:
  • 簡單談談Linux內(nèi)核定時器
  • Linux下實現(xiàn)定時器Timer的幾種方法總結
  • linux定時任務crontab 實現(xiàn)每秒執(zhí)行一次的方法
  • Linux Crontab 啟動 、運行 和編輯 查看的命令
  • linux下定時執(zhí)行任務的方法及crontab 用法說明(收集整理)
  • linux crontab 實現(xiàn)每秒執(zhí)行的實例
  • linux定時器crontab的使用教程

標簽:赤峰 淘寶邀評 許昌 馬鞍山 金昌 邵陽 巴彥淖爾 婁底

巨人網(wǎng)絡通訊聲明:本文標題《linux使用select實現(xiàn)精確定時器詳解》,本文關鍵詞  linux,使用,select,實現(xiàn),精確,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《linux使用select實現(xiàn)精確定時器詳解》相關的同類信息!
  • 本頁收集關于linux使用select實現(xiàn)精確定時器詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 亚洲一区二区三区四区五区色欲| 欧洲a级片| 亚洲色熟女图激情另类图区| 久久人人爽爽爽人久久久| 202z欧美成人| 影音先锋aV色婷婷96人妻影院| 把欠揍的屁股撅好打烂高h| 久久久久久久久国产| 女友小柔被黑人伦流澡到高潮| 91精品国产综合久久精品图片| 杨钰莹欲乱小说| 国产精品视频二区不卡| 新Chinese无套小帅KTV| 天天5g天天爽网站| 我要看日批视频| 欧美激情一区二区三区蜜桃视频| 国产成人无码AV片在观看| 女人?精XXXXX亚| 好爽我要h| 一级毛片成人免费看免费不卡 | 巨大乳の揉んで乳榨り| 办公室囗交10p| 纯欲大尺度小说| 高辣视频| 扒开美女?狂揉?真人游戏| 欧美人妻免费看一区二区| 黑人巨大精品播放| 国产宾馆自拍| 日本无码熟妇五十路视频| 国产做a视频免费观看| 中国黄色大片| 欧美日韩视频一区二区| 果冻传媒一二三区AV精品电影 | 被粗大jib捣出了白浆免费软件| 精品综合一区二区va字幕| 一级性生活免费看| 国产的鲁啊鲁| 午夜福利伦妓片A片AAA小说| 无码精品人妻一区二区三刘亦菲 | 啊?啊?啊?快?高潮了男动漫| 制服丝袜_1页_爱中色综合|