Windows与Linux系统实现延迟的比较+Windows下实现微秒延迟

本文探讨了Windows与Linux系统在实现延迟方面的差异,指出Windows的Sleep函数以毫秒为单位,而Linux的sleep函数以秒为单位,usleep则用于微秒延迟。在Windows内核中,延迟由pause和alarm函数支持。值得注意的是,在Codeblocks(使用mingw编译器)环境下,不推荐使用sleep函数,建议使用Sleep函数来实现微秒级别的延迟,但这种方法并不完全精确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在VC中Sleep中的第一个英文字符为大写的"S"
在标准C中是sleep, 不要大写。下面使用大写的来说明(具体用什么看你用什么编译器. 简单的说VC用Sleep, 别的一律使用sleep)
Sleep函数的一般形式:
            Sleep(unsigned long);

其中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是

#inlcude <windows.h>
Sleep(1000);


在Linux下,sleep中的“s”不大写

sleep()单位为秒,usleep()里面的单位是微秒。

在内核中,sleep的实现是由pause函数和alarm函数两个实现的。

特别注意在Codeblocks环境下是无法使用sleep函数的,因为在windows上Codeblocks采用mingw(Gnu在Window环境下的编译器,

可以充分使用WindowsApi)作为编译器,而在stdlib.h中sleep的说明如下:_CRTIMP void __cdecl __MINGW_NOTHROW _sleep (unsigned long) __MINGW_ATTRIB_DEPRECATED;可以认为mingw舍弃了sleep函数,建议用Sleep实现sleep。

#include <unistd.h>
sleep(1);


Windows下实现微秒延迟(并不完全精确)

void delay_us(void)
{
  LARGE_INTEGER litmp;
  LONGLONG QPart1, QPart2;
  double dfMinus, dfFreq, dfTim;
  QueryPerformanceFrequency(&litmp);
  dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率
  QueryPerformanceCounter(&litmp);
  QPart1 = litmp.QuadPart;// 获得初始值
  do {
    QueryPerformanceCounter(&litmp);
    QPart2 = litmp.QuadPart;//获得中止值
    dfMinus = (double)(QPart2-QPart1);
    dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒
  }while(dfTim<0.000001);
}
int main()  
{  
   printf("The start clock is: %ld\n", clock());  
   delay_us();
   printf("The end clock is: %ld\n", clock());  
   system("pause");
   return 0;  
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值