linuxc定時器
『壹』 linux定時器周期設置多少
linux定時器周期設置60分鍾。根據查詢相關資料信息:linux鍵入crontab-e編沒高輯crontab服消察叢務文件即可設置定時器拿櫻周期。
『貳』 使用struct itimerval做了一個定時器,現在我希望在執行一些函數的時候停止計時,怎麼處理linux c語言
用setTimeout函數的時候會有一個返回的id,你可以用一個id記錄一個setTimeout。id=setTimeout("這里寫你的函數",1000);然後當你不用的時候可以clearTimeout(id)釋放這個timer。
『叄』 我在網上搜了一個Linux下的c++定時器,但是不會用。不知道時間在哪設置,定時觸發的程序添加到哪請教一下
這里是利用了一個簡單定時器……
alarm的參數為秒數,在經過指定秒數後,alarm會發出一個SIGALRM信號
singal函數用來綁定信號處理器肢旁伏函數,啟基這里綁定的是timer,被綁定的函數必須固定為返回值void、參歷攜數int。
只需要alarm(時間)就設置了,可能由於getchar需要進入中斷導致信號被掛起所以沒反應吧,可以試試把getchar換成別的東西來延時看看
『肆』 Linux C 程序中設置了一個定時器,如果定時器回調函數是個相對耗時的處理函數,會出現什麼結果
當然可以,調用C庫時間函數,查詢當前時間,循環檢測時間,到了時間就進行你自己的操作了
『伍』 linuxc++最多可以使用多少個定時器
一個定時器。setitimer的工作機制為:對亂畝it_value倒計時,當伏陪宴it_value為零時觸發信號。重置為it_interval,再繼續對it_value倒缺銀計時,一直循環下去。
『陸』 linux下多個定時器的實現(C語言),麻煩高手指點哈嘛(急)
給你兩個函數參考
omsTimer函數是處理定時事件,void(*handle)(union sigval v)參數就是處理事件的函數指針。
int omsSetTimer(timer_t *tId,int value,int interval)就是設置定時器。
按你說的,如果要同時起多個定時器,需要定義一個數組timer_t tm[n];int it[n];tm就是定時器結構,it用來記錄對應的定時器是否已經使用,使用中的就是1,沒用的就是0;
主進程消息來了就從it找一個沒用的來omsSetTimer,如果收到終止消息,那omsSetTimer 定時時間為0
int omsTimer(timer_t *tId,int iValue,int iSeconds ,void(*handle)(union sigval v),void * param)
{
struct sigevent se;
struct itimerspec ts;
memset (&se, 0, sizeof (se));
se.sigev_notify = SIGEV_THREAD;
se.sigev_notify_function = handle;
se.sigev_value.sival_ptr = param;
if (timer_create (CLOCK_REALTIME, &se, tId) < 0)
{
return -1;
}
ts.it_value.tv_sec = iValue;
// ts.it_value.tv_sec =3;
//ts.it_value.tv_nsec = (long)(iValue % 1000) * (1000000L);
ts.it_value.tv_nsec = 0;
ts.it_interval.tv_sec = iSeconds;
//ts.it_interval.tv_nsec = (long)(iSeconds % 1000) * (1000000L);
ts.it_interval.tv_nsec = 0;
if (timer_settime(*tId, TIMER_ABSTIME, &ts, NULL) < 0)
{
return -1;
}
return 0;
}
int omsSetTimer(timer_t *tId,int value,int interval)
{
struct itimerspec ts;
ts.it_value.tv_sec =value;
//ts.it_value.tv_nsec = (long)(value % 1000) * (1000000L);
ts.it_value.tv_nsec = 0;
ts.it_interval.tv_sec = interval;
//ts.it_interval.tv_nsec = (long)(interval % 1000) * (1000000L);
ts.it_interval.tv_nsec = 0;
if (timer_settime(*tId, TIMER_ABSTIME, &ts, NULL) < 0)
{
return -1;
}
return 0;
}
『柒』 我想在linux用c搞個 定時程序然後可以指定時間運行程序。時間是小時和分鍾的。主要是分鍾要可以累加。比如
crontab
-e
,然後,輸入
*
*/1
*
*
*
這個是每隔一個小時,執行一次。。。
樓主需要的情況,at,crontab
都是無法完全滿足的,因為,crontab
每次執行,只能是每隔一段時間(但是間隔時間都是相同的),或者在某個時刻,樓主這種,情況很特殊,估計,需要,編寫c
程序,才可以搞定的。。。
『捌』 linux下的幾種時鍾和定時器機制
1. RTC(Real Time Clock)
所有PC都有RTC. 它和CPU和其他晶元獨立。它在電腦關機之後還可以正常運行。RTC可以在IRQ8上產生周期性中斷. 頻率在2Hz--8192HZ.
Linux只是把RTC用來獲取時間和日期. 當然它允許進程通過對/dev/rtc設備來對它進行編程。Kernel通過0x70和0x71 I/O埠來訪問RTC。
2. TSC(Time Stamp Counter)
80x86上的微處理器都有CLK輸入針腳. 從奔騰系列開始. 微處理器支持一個計數器. 每當一個時鍾信號來的時候. 計數器加1. 可以通過匯編指令rdtsc來得到計數器的值。通過calibrate_tsc可以獲得CPU的頻率. 它是通過計算大約5毫秒里tsc寄存器裡面的增加值來確認的。或者可以通過cat /proc/cpuinfo來獲取cpu頻率。tsc可以提供比PIT更精確的時間度量。
3. PIT(Programmable internval timer)
除了RTC和TSC. IBM兼容機提供了PIT。PIT類似微波爐的鬧鍾機制. 當時間到的時候. 提供鈴聲. PIT不是產生鈴聲. 而是產生一種特殊中斷. 叫定時器中斷或者時鍾中斷。它用來告訴內核一個間隔過去了。這個時間間隔也叫做一個滴答數。可以通過編譯內核是選擇內核頻率來確定。如內核頻率設為1000HZ,則時間間隔或滴答為1/1000=1微秒。滴答月短. 定時精度更高. 但是用戶模式的時間更短. 也就是說用戶模式下程序執行會越慢。滴答的長度以納秒形式存在tick_nsec變數裡面。PIT通過8254的0x40--0x43埠來訪問。它產生中斷號為IRQ 0.
下面是關於pIT裡面的一些宏定義:
HZ:每秒中斷數。
CLOCK_TICK_RATE:值是1,193,182. 它是8254晶元內部振盪器頻率。
LATCH:代表CLOCK_TICK_RATE和HZ的比率. 被用來編程PIT。
setup_pit_timer()如下:
spin_lock_irqsave(&i8253_lock, flags);
outb_p(0x34,0x43);
udelay(10);
outb_p(LATCH & 0xff, 0x40);
udelay(10);
outb (LATCH >> 8, 0x40);
spin_unlock_irqrestore(&i8253_lock, flags);
4. CPU Local Timer
最近的80x86架構的微處理器上的local apic提供了cpu local timer.他和pit區別在於它提供了one-shot和periodic中斷。它可以使中斷發送到特定cpu。one-shot中斷常用在實時系統裡面。
『玖』 linux下C語言有沒有定時調用的函數
你是指延遲函數還是定時調用,比如到11:12:13秒執行某個函數?
如果是延時函數用
usleep(usec);//微妙
sleep(sec);//秒
如果是定時執行的話,你只能開個線程或while,每隔1s判斷下當前系統時間,
structtm*ptm;
longts;
inty,m,d,h,n,s;
ts=time(NULL);
ptm=localtime(&ts);
y=ptm->tm_year+1900;//年
m=ptm->tm_mon+1;//月
d=ptm->tm_mday;//日
h=ptm->tm_hour;//時
n=ptm->tm_min;//分
s=ptm->tm_sec;//秒
照著上面的格式組成字元串進行判斷,到點了就執行就可以了
『拾』 有誰會用linux裡面的定時器timer_list
這段代碼是Linux的一個內核模塊程序,timer_list也是Linux內核中的數據結構。模塊程序不是以main函數作為入口的。而是以mole_init指定。
mole_init/mole_exit分別用於指定模塊的載入和卸載函數。
載入模塊(insmod)時,會調用mytimer_init函數。這個函數設置一個定時器,在定時器超時時執行myfunc函數,指定函數參數為「Hello,world!」。
myfunc執行時,會輸出「Hello,world!」,mod_timer函數會將定時器重新計時,兩秒後到期。
因此整個代碼執行起來後的現象就是每兩秒輸出一次Hello,world!