精品丰满熟女一区二区三区_五月天亚洲欧美综合网_亚洲青青青在线观看_国产一区二区精选

  • <menu id="29e66"></menu>

    <bdo id="29e66"><mark id="29e66"><legend id="29e66"></legend></mark></bdo>

  • <pre id="29e66"><tt id="29e66"><rt id="29e66"></rt></tt></pre>

      <label id="29e66"></label><address id="29e66"><mark id="29e66"><strike id="29e66"></strike></mark></address>
      學習啦>學習電腦>操作系統(tǒng)>Linux教程>

      Linux setitimer函數(shù)的操作技巧

      時間: 孫勝652 分享

        Linux系統(tǒng)使用setitimer函數(shù)能夠事項高精度的定時功能,用于定時執(zhí)行function,下面學習啦小編將針對setitimer函數(shù)的用法給大家做個詳細介紹,一起來了解下吧。

        說明: setitimer一個進程中只能有一個 下一個會覆蓋前一個的定時 想一個進程多個定時器只能自己實現(xiàn)。

        setitimer() 不支持在同一進程中同時使用多次以支持多個定時器。

        linux有關定時器(setitimer)的敘述是這樣的:

        linux系統(tǒng)給每個進程提供了3個定時器,每個定時器在各自不同的域里面計數(shù)。當任何一個timer計數(shù)到結束了,系統(tǒng)就發(fā)送一個信號(signal)給該進程,同時計數(shù)器重置。

        一共支持以下3中計數(shù)器形式:

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

        ITIMER_VIRTUAL 當進程在執(zhí)行的過程中計數(shù),然后當計數(shù)完畢后發(fā)送SIGVTALRM信號給該進程。

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

        【getitimer/setitimer系統(tǒng)調用】

        功能描述:

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

        用法:

        #include 《sys/time.h》

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

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

        參數(shù):

        which:間歇計時器類型,有三種選擇

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

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

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

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

        struct itimerval

        {

        struct timeval it_interval;

        struct timeval it_value;

        };

        struct timeval

        {

        long tv_sec;

        long tv_usec;

        };

        getitimer()用計時器的當前值填寫value指向的結構體。

        setitimer()將value指向的結構體設為計時器的當前值,如果ovalue不是NULL,將返回計時器原有值。

        返回說明:

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

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

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

        #include 《stdio.h》

        #include 《unistd.h》

        #include 《signal.h》

        #include 《string.h》

        #include 《sys/time.h》

        #include 《errno.h》

        void PrintMsg(int Num)

        {

        printf(“%s/n”, “Hello World”);

        return;

        }

        int main(int argc, char* argv[])

        {

        signal(SIGALRM, PrintMsg);

        struct itimerval tick;

        tick.it_value.tv_sec = 10; //十秒鐘后將啟動定時器

        tick.it_value.tv_usec = 0;

        tick.it_interval.tv_sec =1; //定時器啟動后,每隔1秒將執(zhí)行相應的函數(shù)

        tick.it_interval.tv_usec = 0;

        //setitimer將觸發(fā)SIGALRM信號

        int ret = setitimer(ITIMER_REAL, &tick, NULL);

        if ( ret != 0)

        {

        printf(“Set timer error. %s /n”, strerror(errno) );

        return -1;

        }

        printf(“Wait!/n”);

        getchar();

        return 0;

        }

        上面就是Linux中setitimer函數(shù)的用法介紹了,setitimer函數(shù)擁有三種類型計時器選擇,為了達到更高精度的定時,還是選擇setitimer函數(shù)比較好。

      316139