Bootstrap

linux sleep函数坑你点儿没关系,但是真的坑死你

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));
}

测试代码

结果如下

;