我是靠谱客的博主 受伤树叶,这篇文章主要介绍linux下的usleep,现在分享给大家,希望可以做个参考。

sleep()是以秒为单位的,要想延迟一个较小的时间,就需要用到usleep()。

另外还有个nanosleep(),用法好像很复杂。

 usleep可能很难保证时间精度。我写了一段测试代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h> #include <unistd.h> #include <sys/time.h> int main(void) { int i; struct timeval tvTotal; struct timeval tvBegin, tvEnd, tvSub; tvTotal.tv_sec = 0; tvTotal.tv_usec = 0; for (i = 0; i < 100; i++) { gettimeofday(&tvBegin, NULL); usleep(1000); // 1000 us(microsecond/微秒) = 1 ms(毫秒) gettimeofday(&tvEnd, NULL); timersub(&tvEnd, &tvBegin, &tvSub); tvTotal.tv_sec += tvSub.tv_sec; tvTotal.tv_usec += tvSub.tv_usec; printf("%dn", tvSub.tv_usec); } printf("try to usleep 1000 us 100 times, average of result is: %ldn", tvTotal.tv_sec*1000*10+tvTotal.tv_usec/100); return 0; }


在虚拟机上运行的结果,证实偏差很大:
[root@localhost ~]# ./test
1118
1700
1855
3428
2148
3097
1347
1339
1800
1837
4322
4228
8866
1343
1902
1816
2353
1238
2065
1347
1775
1717
1924
2142
3011
1945
3078
6542
1918
2647
1780
2507
2447
4542
3574
8839
2014
1503
1240
1844
1993
1903
1936
1498
1798
1357
2882
7804
1234
1323
2404
1410
1972
1909
2066
1901
1371
2113
1477
1477
1403
6248
1691
2539
2005
1303
1940
1975
1983
2167
2021
1484
1460
2364
5229
1890
1193
2132
1894
1876
1973
2120
1844
1949
1407
1727
2186
1872
1900
7160
1703
1971
1243
1495
1861
2017
1223
1125
1733
1498
try to usleep 1000 us 100 times, average of result is: 2327

抖动非常厉害。
明天找个arm板在测测看看。

最后

以上就是受伤树叶最近收集整理的关于linux下的usleep的全部内容,更多相关linux下内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部