usleep函数不能用于windows,那怎么办,毫秒级的sleep还是快了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了usleep函数不能用于windows,那怎么办,毫秒级的sleep还是快了相关的知识,希望对你有一定的参考价值。

参考技术A

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

usleep()函数的功能是把调用该函数的线程挂起一段时间, 单位是微秒(microseconds:即百万分之一秒); 头文件: unistd.h 语法: void usleep(int micro_seconds); 返回值: 无 内容说明:本函数可暂时使程序停止执行。

参考技术B 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);


这样大体延迟1微秒,用的是根据CPU的频率方法,但是没法非常精确,因为WINDOWS本身就不是个实时系统,但是你用应该足够了
参考技术C Sleep(1000); 不就是休眠一秒吗?追问

是啊,但还是慢了

追答

你是想精度更高,那我只知道 可等候定时器, 精度可以达到100纳秒左右。

追问

该怎么做啊

参考技术D 这群捞货 就用这种low法爆吧?

linux下的sleep()和usleep()的使用和区别

函数名: sleep
头文件: #include<windows.h> // 在VC中使用带上头文件
              #include<unistd.h>    // 在gcc编译器中,使用的头文件因gcc版本的不同而不同
功  能: 执行挂起指定的秒数
语  法: unsigned sleep(unsigned seconds);

 

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

int main()
{
    int a;
    a=1;
    printf("hello");
    sleep(a);        /* VC 使用Sleep*/
    printf("world");
    return 0;
}

 

  

函数名: usleep
头文件: #include <unistd.h>
功 能: usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒);
语 法: void usleep(int micro_seconds);
返回值: 无
内容说明:本函数可暂时使程序停止执行。参数 micro_seconds 为要暂停的微秒数(us)。

注 意:
这个函数不能工作在windows 操作系统中。用在Linux的测试环境下面。
参 见:usleep() 与sleep()类似,用于延迟挂起进程。进程被挂起放到reday queue。
在一般情况下,延迟时间数量级是秒的时候,尽可能使用sleep()函数。
如果延迟时间为几十毫秒(1ms = 1000us),或者更小,尽可能使用usleep()函数。这样才能最佳的利用CPU时间

以上是关于usleep函数不能用于windows,那怎么办,毫秒级的sleep还是快了的主要内容,如果未能解决你的问题,请参考以下文章

datesleep和usleep命令

sleep()和usleep()

Linux的sleep()和usleep()的使用和区别

sleep()和usleep()的使用和区别

php--------暂停函数 sleep() 与 usleep() 的区别

PHP 暂停函数 sleep() 与 usleep() 的区别