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
Copyright (C) 1998, Masahiro SATO