定期的な実行

定期的な実行

定期的な実行

Menu

決まった時間で実行するには、setitimer というのを使う。signal が来るので、sigpause で待とう。

    void check(void)
    {
            /* this function does nothing. */
    }
    main() {
        ....
        struct itimerval itv ;
        int simt = 0, sent = 0, rect = 0 ;
        itv.it_interval.tv_sec = 0 ;
        itv.it_interval.tv_usec = TIMEDELTA * 1000 ;
        itv.it_value.tv_sec = 0 ;
        itv.it_value.tv_usec = TIMEDELTA * 1000 ;
        signal(SIGALRM, (void (*)(int))check) ;
        setitimer(ITIMER_REAL, &itv, NULL) ;
        for (;;) {
                sigpause(sigblock(0L)) ;
                do someting....
        }
    }

または、select のtimeout を使っても良い。こちらの方が簡単だがmain loop を使用する必要がある。

setitimer はsignalが来るので、read/write が失敗する可能性がある。その場合の対処方を示せ。

どちらかの方法を使い、keyrecord に、途中で時間を表示するコードを足してみよう。


Shinji KONO / Tue Jan 8 12:17:31 2008