當前位置:首頁 » 操作系統 » Linux定時select

Linux定時select

發布時間: 2023-12-29 11:41:33

『壹』 求linux毫秒級定時器的實現

自己用多線程實現唄,如果不要求精確控制的話,只需要讓新開的線程循環,每次循環sleep 300毫秒,然後觸發主線程的處理

『貳』 select 循環定時器 linux

select函數
不是定時器,是I/O的復用,變成
非同步傳輸
。linux的定時器要用信號如alarm來完成秒級定時,用內核定時完成毫秒級定時器。

『叄』 怎樣在Linux下實現精確定時器

linux下使用select實現精確定時器
在編寫程序時,我們經常回用到定時器。本文講述如何使用select實現超級時鍾。使用select函數,我們能實現微妙級別精度的定時器。同時,select函數也是我們在編寫非阻塞程序時經常用到的一個函數。
首先看看select函數原型如下:
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);

參數說明:
slect的第一個參數nfds為fdset集合中最大描述符值加1,fdset是一個位數組,其大小限制為__FD_SETSIZE(1024),位數組的每一位代表其對應的描述符是否需要被檢查。
select的第二三四個參數表示需要關注讀、寫、錯誤事件的文件描述符位數組,這些參數既是輸入參數也是輸出參數,可能會被內核修改用於標示哪些描述符上發生了關注的事件。所以每次調用select前都需重新初始化fdset。
timeout參數為超時時間,該結構會被內核修改,其值為超時剩餘的時間。
利用select實現定時器,需要利用其timeout參數,注意到:
1)select函數使用了一個結構體timeval作為其參數。
2)select函數會更新timeval的值,timeval保持的值為剩餘時間。
如果我們指定了參數timeval的值,而將其他參數都置為0或者NULL,那麼在時間耗盡後,select函數便返回,基於這一點,我們可以利用select實現精確定時。
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(err<0 && 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(err<0 && 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(err<0 && errno==EINTR);
}

現在我們來編寫幾行代碼看看定時效果吧。

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

註:timeval結構體中雖然指定了一個微妙級別的解析度,但內核支持的分別率往往沒有這么高,很多unix內核將超時值向上舍入成10ms的倍數。此外,加上內核調度延時現象,即定時器時間到後,內核還需要花一定時間調度相應進程的運行。因此,定時器的精度,最終還是由內核支持的分別率決定。

『肆』 誰能告訴我 linux下select函數到底是干什麼用的 貌似我不用它也可以得到我想要的結果啊

select是用來設置超時時間的,其第一個參數本來是一個文件號,假如讀取該文件長時間沒有返回則超時跳出,而這部分代碼將文件號設置為0,說明只是為了控制延時不過看你這部分代碼,明顯只是實現一個比較精確定時的sleep這段代碼之所以這么做,是因為linux本身的sleep函數非常不準(windows也是一樣),在線程較多,cpu任務較重的時候,sleep函數的精確度根本無法達到要求於是你這段代碼使用select來代替sleep更為精準,其精準程度和內核相關,如果內核的滴答頻率決定的,一般是100HZ也有1000hz的(因內核版本不同而不同),也就是說select做多可以精確到10ms,或者1ms,而sleep就做不到於是這段函數最重要的作用就是用高精確的select函數來代替低精確度的sleep函數,實現時間較為精準的延時。可查閱《Linux就該這么學》了解更多Linux介紹。

『伍』 linux下的select函數是幹嘛的

不是用得很好嗎?精確延時功能。
此外,可以用來判斷讀寫操作是否在指定時間內就緒。

『陸』 linuxmysql怎麼啟動定時任務

mysql的定時任務一般用event(事件)來完成,觸發器無法完成。一、通過mysql的命令行客戶端來完成
1、set global event_scheler =1; //開啟event_scheler
執行這個語句如果出現,可在mysql的配置文檔中設置[mysqld]段中添加 event_scheler=ON
如果重啟mysql;這種情況下依然出錯,Error Code: 1290. The MySQL server is running with the --event-scheler=DISABLED
or --skip-grant-tables option so it cannot execute this statement,這個錯誤是說啟動伺服器時如果指定了--skip-grant-tables選項,則event_scheler則自動被設置為DISABLED。命令行或配置文件的設置都會被覆蓋。建議重現安裝mysql或是修改啟動參數(在系統服務中指定)。
查看event_scheler狀態:show status like '%event%'; 或SELECT @@event_scheler;
2、CREATE PROCEDURE Mypro() //創建存儲過程
BEGIN
update userinfo SET endtime = now() WHERE id = '155';
END;
3、創建event My_enevt,每隔三十秒執行一次
create event if not exists e_test
on schele every 30 second
on completion preserve
do call Mypro();
4、關閉事件
alter event e_test ON COMPLETION PRESERVE DISABLE;
5、開啟事件
alter event e_test ON COMPLETION PRESERVE ENABLE;
語法:
CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schele [ON COMPLETION
[NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement;
schele: AT TIMESTAMP [+ INTERVAL INTERVAL] | EVERY INTERVAL [STARTS TIMESTAMP]
[ENDS TIMESTAMP] INTERVAL: quantity {YEAR | QUARTER | MONTH | DAY | HOUR |
MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND |
HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

熱點內容
傳奇伺服器源碼 發布:2024-11-29 11:43:15 瀏覽:819
新手機如何登錄微信密碼忘記了 發布:2024-11-29 11:34:34 瀏覽:543
筆記本配置低怎麼玩lol 發布:2024-11-29 11:34:32 瀏覽:460
如何在iphone上玩安卓號 發布:2024-11-29 11:24:21 瀏覽:753
伺服器店鋪怎麼取名 發布:2024-11-29 11:19:26 瀏覽:3
phpapache日誌 發布:2024-11-29 11:07:26 瀏覽:309
國圖資料庫 發布:2024-11-29 10:34:15 瀏覽:541
vpn免流伺服器搭建 發布:2024-11-29 10:26:12 瀏覽:245
c源文件編譯後的擴展名為 發布:2024-11-29 10:08:40 瀏覽:924
腳本自動登錄 發布:2024-11-29 09:55:27 瀏覽:63