linux系统编程,大家使用延时函数,最常用的是sleep,BUT。。。。。。。。。。
因为sleep()运行是程序捕获到一个信号,那么这个信号就会中断sleep,去执行信号所指内容,等处理好信号之后,程序会直接跳到sleep的下一行执行,那么即使sleep秒数没有数完,也照样结束。这就是造成sleep失效的原因。
那么根据这个特性,我提供一种不太精确的解决方法,就是将sleep放到一个循环中去。每次循环延时1秒,因此要延时的秒数约等于循环的次数。在延时精度要求不高的情况下我认为这个方法是可行的,也希望我的方法能够抛砖引玉,得到更多好的方法;
如下博主提供
https://blog.csdn.net/qimi123456/article/details/52225726
解决方法
void msleep(UINT32 ms)
{
struct timespec ts = {
ms / 1000,
(ms % 1000) * 1000 * 1000
};
while((-1 == nanosleep(&ts,&ts))&&(EINTR == errno));
}
测试代码
结果如下