Linux setitimer參數(shù)設(shè)定如何使用程序
Linux setitimer對(duì)于電腦使用的玩家的常用軟件,然后我就學(xué)習(xí)及深入的研究Linux setitimer,在這里和大家一起探討Linux setitimer的使用方法,希望對(duì)大家有用。Linux setitimer()為L(zhǎng)inux的API,并非C語(yǔ)言的Standard Library,Linux setitimer()有兩個(gè)功能,一是指定一段時(shí)間后,才執(zhí)行某個(gè)function,二是每間格一段時(shí)間就執(zhí)行某個(gè)function,以下程序demo如何使用Linux setitimer()。
- view plaincopy to clipboardprint?/*
- Filename : timer.cpp
- Compiler : gcc 4.1.0 on Fedora Core 5
- Description : Linux setitimer() set the interval to run function
- Synopsis : #include <sys/time.h>
- int Linux setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
- struct itimerval {
- struct timerval it_interval;
- struct timerval it_value;
- };
- struct timeval {
- long tv_sec;
- long tv_usec;
- }
- Release : 11/25/2006
- */
- #include <stdio.h> // for printf()
- #include <unistd.h> // for pause()
- #include <signal.h> // for signal()
- #include <string.h> // for memset()
- #include <sys/time.h> // struct itimeral. Linux setitimer()
- void printMsg(int);
- int main() {
- // Get system call result to determine successful or failed
- int res = 0;
- // Register printMsg to SIGALRM
- signal(SIGALRM, printMsg);
- struct itimerval tick;
- // Initialize struct
- memset(&tick, 0, sizeof(tick));
- // Timeout to run function first time
- tick.it_value.tv_sec = 1; // sec
- tick.it_value.tv_usec = 0; // micro sec.
- // Interval time to run function
- tick.it_interval.tv_sec = 1;
- tick.it_interval.tv_usec = 0;
- // Set timer, ITIMER_REAL : real-time to decrease timer,
- // send SIGALRM when timeout
- res = Linux setitimer(ITIMER_REAL, &tick, NULL);
- if (res) {
- printf("Set timer failed!!\n");
- }
- // Always sleep to catch SIGALRM signal
- while(1) {
- pause();
- }
- return 0;
- }
- void printMsg(int num) {
- printf("%s","Hello World!!\n");
- }
當(dāng)Linux setitimer()所執(zhí)行的timer時(shí)間到了,會(huì)呼叫SIGALRM signal,所以在第30行用signal()將要執(zhí)行的function指定給SIGALRM。 在第43行呼叫Linux setitimer()設(shè)定timer,但Linux setitimer()
第二個(gè)參數(shù)是sturct,負(fù)責(zé)設(shè)定timeout時(shí)間,所以第36行到第 40行設(shè)定此struct。itimerval.it_value設(shè)定第一次執(zhí)行function所延遲的秒數(shù), itimerval.it_interval設(shè)定以后每幾秒執(zhí)行function,所以若只想延遲一段時(shí)間執(zhí)行function,只要設(shè)定 itimerval.it_value即可.
若要設(shè)定間格一段時(shí)間就執(zhí)行function,則it_value和it_interval都要設(shè)定,否則 funtion的第一次無(wú)法執(zhí)行,就別說(shuō)以后的間隔執(zhí)行了。 第36行和第39行的tv_sec為sec,第37行和40行為micro sec(0.001 sec)。 第43行的第一個(gè)參數(shù)ITIMER_REAL,表示以real-time方式減少timer,在timeout時(shí)會(huì)送出SIGALRM signal。
第三個(gè)參數(shù)會(huì)存放舊的timeout值,如果不需要的話,指定NULL即可。 第47 行的pause(),命令系統(tǒng)進(jìn)入sleep狀態(tài),等待任何signal,一定要用while(1)無(wú)窮循環(huán)執(zhí)行pause(),如此才能一直接收 SIGALRM signal以間隔執(zhí)行function,若拿掉while(1),則function只會(huì)執(zhí)行一次而已。
【編輯推薦】