usleep

目次

仮眠 Zzz..

今度は usleep(3) を使ってみましょう. sleep に対して usleep. 想像はつくと思いますが, マイクロ秒単位で止める時間を指定することが可能です. man usleep を見ると, すごく説明が短い です (^^; (Linux Programmer's Manual だけか?)

man usleep の DESCRIPTION には, 実際に指定した時間よりもちょっと長くなりますよ と書いてあったりします.

時を計りしもの

sleep のときと同じように, gettimeofday(2) を利用します. 使い方も同じです.

プログラム例

プログラムは sleep のときとほとんど同じです. 待っている部分を sleep の代わりに usleep にしているくらいですね. SLEEP_USEC では 20000 マイクロ秒 = 20 ミリ秒を指定しています.

 1  /*
 2   * test_usleep.c
 3   * usleep を使って, 間隔をあけるテスト
 4   */
 5
 6  #include <stdio.h>
 7  #include <unistd.h>
 8  #include <sys/time.h>
 9
10  #define SLEEP_USEC 20000
11  #define LOOP 5
12
13  int main()
14  {
15    int i;
16    struct timeval tv[LOOP];
17    struct timezone tz;
18
19    for(i=0; i<LOOP; i++){
20      usleep(SLEEP_USEC);
21      gettimeofday(tv + i, &tz);
22    }
23
24    for(i=0; i<LOOP; i++){
25      printf("%3d : %ld:%06ld\n", i, tv[i].tv_sec, tv[i].tv_usec);
26    }
27
28    return 0;
29  }

実行結果

結果を見ると, 30 ミリ秒ずつ停止しているようですね. う〜ん, ほぼ等間隔 (^^;

  0 : 892370061:870755
  1 : 892370061:900664
  2 : 892370061:930664
  3 : 892370061:960664
  4 : 892370061:990848


[うさぎ]

m@sa.to