clock(), sleep(), Sleep()在windows和Linux的区别

最近在ARM上的Linux进行开发,需要将Windows下编写的C程序移植到Linux上去,其中需要将底层的SPI驱动实现,以及上层的Socket通信改写,其中应用程序也需要改变一些,整个过程中,让程序顺利跑起来没花费大的力气,这里要感谢强大的Eclipse +ARM-linux-gcc组合,但是在调试过程中,发现很多有趣的问题,其中一个就是关于Windows下的Sleep()函数和Linux下的sleep()函数的区别。

在windows下的Sleep()函数需要包含windows.h头文件,而在Linux下需要包含的头文件是unistd.h头文件,说明sleep()函数不是标准的C语言库,而且在Windows下Sleep()睡眠时间为毫秒,而Linux下的sleep()函数时间为秒,如果需要实现更精确的时间,Linux下可以采用usleep()函数,微妙级别,在Windows下貌似没有更精确的,只能到毫秒级别(个人观点,还没证实)。说到这,其实windows和Linux的区别其实还是非常小,和clock()函数组合后,发现了其中的不同,其中clock()函数是标准的C语言库提供的函数,功能如下:

clock returns the processor time used by program since the beginning of the execution, or -1 if unavailable. clock() / CLOCKS_PER_SEC is a time in seconds.

这里提到clock()函数返回的程序运行过程耗掉得process time,也就是CPU time,在windows下和Linux下,我们分别测试如下代码:

Windows:

#include <stdio.h>
#include <time.h>
#include <windows.h>

int main()
{
	printf("The start clock is: %ld\n", clock());
	Sleep(2000);
	printf("The end clock is: %ld\n", clock());

	return 0;
}
Linux:

#include <stdio.h>
#include <time.h>
#include <unistd.h>

int main()
{
        printf("The start clock is: %ld\n", clock());
        sleep(2);
        printf("The end clock is: %ld\n", clock());

        return 0;
}

运行的结果:

Windows:

The start clock is: 1
The end clock is: 2001

Linux:

The start clock is: 0
The end clock is: 0

这说明在Windows Sleep()占用processor time,Linux下的sleep()不占用processor time,这可能与底层的sleep()实现机制的不同所导致的。


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值