usleep今度は 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
![[うさぎ]](../../image/usagi/usa-s.png)
Copyright (C) 1998, Masahiro SATO