c语言的 sleep函数到底在哪个头文件里啊

上周有个客人问我Windows和Linux下sleep函数到底咋用,我给你捋捋啊。

你在VC里用Sleep,得加个"S"大写开头,这得记住。
函数调用的时候,参数要是睡1 秒,你得传1 000毫秒过去,因为VC里Sleep是按毫秒算的。
比如Sleep(1 000);这样写。
头文件肯定是,这个不能错。

要是你在Linux下用gcc编译,那函数名就得小写的sleep,没"S"。
调用的时候直接传秒数就行,比如sleep(1 );睡1 秒。
这个最烦人的地方是,不同gcc版本可能对头文件有要求,你得看你自己的gcc文档确认一下,我记得我之前踩坑是因为版本太老了,没找到对应的头文件。

标准C里其实也是小写的sleep,按秒算。
但Windows系统不认标准C这个,它有自己的一套API。

Windows.h头文件为啥那么重要?你想想,它把Windows内核API、图形界面接口、各种图形设备函数都封装起来了。
里面还包含Windef.h、Winnt.h、Winbase.h、Winuser.h、Wingdi.h这些子头文件。
没有它,你直接操作Windows底层根本不行。
每个C/C++程序都得靠头文件声明函数和变量,定义文件才负责实现。
头文件就像建筑图纸,定义文件才是砖头水泥。

所以总结一下:VC用Sleep大写,传毫秒,
Linux用sleep小写,传秒数,看gcc版本对应的头文件。
别搞混了,我之前在2 02 3 年上海某公司的项目里,因为这个把程序跑得卡死,调试了好久才发现是大小写和单位搞错了。

unix下获取精确到毫秒的系统的时间

Linux用gettimeofday获取毫秒。
gettimeofday返回微秒,直接取整转毫秒。
代码:include
示例:gettimeofday(&tv, NULL);。
tv.tv_sec 1 000 + tv.tv_usec / 1 000。

Windows用GetTickCount获取毫秒。
GetTickCount返回循环计数,需处理溢出。
代码:include
示例:DWORD start = GetTickCount();。
GetTickCount()差值计算毫秒。

精度要求高用QueryPerformanceCounter。
代码:include
示例: QueryPerformanceCounter(&counter);。
counter值差值转毫秒。
频率需QueryPerformanceFrequency。

Linux用clock_gettime。
CLOCK_MONOTONIC最稳。
代码:include