精华内容
下载资源
问答
  • Windows微秒级延时/Sleep延时测试代码 在Windows环境下使用Sleep的时候,经常会遇到明明Sleep了1ms,结果被唤醒时所消耗的时间大于1ms, 对于那些精确度稍微高一点的Sleep控制时序,就不起作用了,众所周知Windows...
  • C++ : windows下使用Sleep()函数

    千次阅读 2020-07-19 22:05:04
    windows平台下使用Sleep()函数将进程挂起

    C++中没有自带与平台无关的sleep()函数,因此在Linux和Windows平台下,使用sleep()将进程挂起的方式是不同的。

    1、Linux下直接使用sleep()即可
    2、Windows下包含头文件 #include <windows.h> ,然后使用Sleep()函数,参数为毫秒,注意Sleep()中的S是大写

    以下代码是关于windwos下Sleep()使用:

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <thread>
    #include <windows.h>
    using namespace std;
    
    void hello()
    {
    	Sleep(2000); // 2000ms = 2s
    	cout << "hello world!" << endl;
    }
    
    int main()
    {
    	thread t(hello);
    	t.join();
    	return 0;
    }
    

    谢谢阅读

    展开全文
  • 主要介绍了Windows命令行bat批处理延迟sleep方法,需要的朋友可以参考下
  • NoSleep主要是在休息的时候提醒电脑是否关机,或者停止工作。一旦发现身后有人,钟离二狗总是习惯性地把笔记本合上。回头一瞥确认安全后,笔记本已自动休眠。NoSleep在系统栏显示图标,帮你避免系统被睡眠或屏保;...
  • Windows命令实现Sleep休眠

    千次阅读 2020-09-30 11:41:21
    等待一分钟:ping 192.0.2.2 -n 1 -w 60000 > nul 等待一秒钟:ping 192.0.2.2 -n 1 > nul (ping一次需要一秒钟) -w 60000 指定毫秒内所需的超时时间。因为地址不存在,所以会等待60,000 ms (60 seconds)并...

    等待一分钟:ping 192.0.2.2 -n 1 -w 60000 > nul

    等待一秒钟:ping 192.0.2.2 -n 1 > nul (ping一次需要一秒钟)

    -w 60000 指定毫秒内所需的超时时间。因为地址不存在,所以会等待60,000 ms (60 seconds)并返回。
    -n 1 意思是只ping一次(默认是ping四次).
    > nul 屏蔽屏幕输出.

    展开全文
  • Windows几种sleep精度的测试,结果基于微秒

    万次阅读 热门讨论 2019-08-15 16:57:19
    Windows几种sleep精度的测试 在Windows环境下使用Sleep的时候,经常会遇到明明Sleep了1ms,结果被唤醒时所消耗的时间大于1ms, 对于那些精确度稍微高一点的Sleep控制时序,就不起作用了,众所周知WindowsSleep是...

    Windows几种sleep精度的测试

    在Windows环境下使用Sleep的时候,经常会遇到明明Sleep了1ms,结果被唤醒时所消耗的时间大于1ms,

    对于那些精确度稍微高一点的Sleep控制时序,就不起作用了,众所周知Windows的Sleep是基于毫秒级别的,如果需要精确到微秒级,需要另辟蹊径

    本文总结了几种常用的控制时序的方式,可以作为一个参考,测试出来的数值并不一定准确,我在我电脑上和另外一台Win7 i5 2.3GHz的电脑上跑出来的结果差别比较大,可以根据自己电脑或者使用环境多跑些数据

    源码下载链接:0积分下载链接,没有积分的评论区留言,我改链接

    测试类别分别包括:

        1、Windows中的原生Sleep

        2、C++11的this_thread::sleep_for以及timeBeginPeriod调整定时器精度两个方式

        3、socket连接的select的方式

        4、多媒体时钟QueryPerformanceCounter的微秒级方式

        5、MsgWaitForMultipleObjectsEx

    系统环境:Win10,CPU i7-8750 2.2GHz

    一、Sleep耗时

    先上代码和测试结果

    代码:

    void Precision_Sleep()
    {
    	std::string buffer;
    	buffer.assign(BUFFER_SIZE, 0);
    	buffer.clear();
    	int i = TEST_TIMES;
    	uint64_t total_used = 0;
    	while (i) {
    		i--;
    		steady_clock::time_point time_begin = steady_clock::now();
    		Sleep(Interval_Millisceonds);
    		steady_clock::time_point time_end = steady_clock::now();
    		char tmp[128] = {0};
    		uint64_t used = duration_cast<microseconds>(time_end - time_begin).count();
    		snprintf(tmp, 128, "%s Sleep %d ms, time used : %lld us\n",
    				 __FUNCTION__, Interval_Millisceonds, used);
    		total_used += used;
    		buffer += tmp;
    	}
    	printf("%s\n", buffer.c_str());
    	printf("%s Sleep %d ms, avatar %lld us\n\n",
    		   __FUNCTION__, Interval_Millisceonds,total_used / TEST_TIMES);
    
    }

    结果:

    这是跑了50次的平均结果,Sleep(1),实际的平均sleep时间大约在1500微秒

    二、C++11,sleep_for

    代码:

    void Precision_sleep_for()
    {
    	std::string buffer;
    	buffer.assign(BUFFER_SIZE, 0);
    	buffer.clear();
    	int i = TEST_TIMES;
    	uint64_t total_used = 0;
    	while (i) {
    		i--;
    		steady_clock::time_point time_begin = steady_clock::now();
    		std::this_thread::sleep_for(microseconds(Interval_Microseconds));
    		steady_clock::time_point time_end = steady_clock::now();
    		char tmp[128] = {0};
    		uint64_t used = duration_cast<microseconds>(time_end - time_begin).count();
    		snprintf(tmp, 128, "%s Sleep %d us, time used : %lld us\n",
    				 __FUNCTION__, Interval_Microseconds, used);
    		total_used += used;
    		buffer += tmp;
    	}
    	printf("%s", buffer.c_str());
    	printf("%s Sleep %d us , avatar %lld us\n\n",
    		   __FUNCTION__, Interval_Microseconds, total_used / TEST_TIMES);
    }
    
    

    结果:

    sleep_for 1000us的平均时间也是在1500us左右

    三、C++11 sleep_for 加上timeBeginPeriod

    代码

    void Precision_sleep_for_timeBeginPeriod()
    {
    	// Test for sleep_for and timeBeginPeriod;
    	std::string buffer;
    	buffer.assign(BUFFER_SIZE, 0);
    	buffer.clear();
    	int i = TEST_TIMES;
    	uint64_t total_used = 0;
    
    	while (i) {
    		i--;
    		steady_clock::time_point time_begin = steady_clock::now();
    		timeBeginPeriod(1);//set Minimum timer resolution.
    		std::this_thread::sleep_for(microseconds(Interval_Microseconds));
    		timeEndPeriod(1);
    		steady_clock::time_point time_end = steady_clock::now();
    		char tmp[128] = {0};
    		uint64_t used = duration_cast<microseconds>(time_end - time_begin).count();
    		snprintf(tmp, 128, "%s Sleep %d us , time used : %lld us\n",
    				 __FUNCTION__, Interval_Microseconds, used);
    		total_used += used;
    		buffer += tmp;
    	}
    	printf("%s", buffer.c_str());
    	printf("%s Sleep %d us , avatar %lld us\n\n",
    		   __FUNCTION__,Interval_Microseconds, total_used / TEST_TIMES);
    }

    结果

     

    无语。。。结果跟不加差不多。。。

    四、select的方法

    socket 中的select有个超时设置,据说这个超时设置是微秒级的,所以利用这点来测试.

    代码

    void SleepSelectUS(SOCKET s, int64_t usec)
    {
    	struct timeval tv;
    	fd_set dummy;
    	FD_ZERO(&dummy);
    	FD_SET(s, &dummy);
    	tv.tv_sec = usec / 1000000L;
    	tv.tv_usec = usec % 1000000L;
    	select(0, 0, 0, &dummy, &tv);
    	DWORD err = GetLastError();
    	if (err != 0)
    		printf("Error : %d", err);
    }
    
    void Precision_select()
    {
    	std::string buffer;
    	buffer.assign(BUFFER_SIZE, 0);
    	buffer.clear();
    	int i = TEST_TIMES;
    	uint64_t total_used = 0;
    	WORD wVersionRequested = MAKEWORD(1, 0);
    	WSADATA wsaData;
    	WSAStartup(wVersionRequested, &wsaData);
    
    	SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    	while (i) {
    		i--;
    		steady_clock::time_point time_begin = steady_clock::now();
    		SleepSelectUS(s, Interval_Microseconds);
    		steady_clock::time_point time_end = steady_clock::now();
    		char tmp[128] = {0};
    		uint64_t used = duration_cast<microseconds>(time_end - time_begin).count();
    		snprintf(tmp, 128, "%s Sleep %d us, time used : %lld us\n",__FUNCTION__, Interval_Microseconds, used);
    		total_used += used;
    		buffer += tmp;
    	}
    	closesocket(s);
    	printf("%s", buffer.c_str());
    	printf("%s Sleep %d us, avatar %lld us\n\n", __FUNCTION__, Interval_Microseconds, total_used / TEST_TIMES);
    
    }

    结果:

    select的精度度稍微有所提高,平均时间为1017us,比上面两个精确一些,基本上可以达到我们的要求。

    再看下500us和100us的

    500微秒和100微秒的时间差不多,大致可以判断select的精度在500us左右。

    五、多媒体时钟轮训的方式

    代码

    void SleepPerformUS(DWORD usec)
    {
    	LARGE_INTEGER perfCnt, start, now;
    
    	QueryPerformanceFrequency(&perfCnt);
    	QueryPerformanceCounter(&start);
    
    	do {
    		QueryPerformanceCounter((LARGE_INTEGER*)&now);
    	} while ((now.QuadPart - start.QuadPart) / float(perfCnt.QuadPart) * 1000 * 1000 < usec);
    }
    
    void Precision_QueryPerformanceCounter()
    {
    	// Test for select;
    	std::string buffer;
    	buffer.assign(BUFFER_SIZE, 0);
    	buffer.clear();
    	int i = TEST_TIMES;
    	uint64_t total_used = 0;
    
    	WORD wVersionRequested = MAKEWORD(1, 0);
    	WSADATA wsaData;
    	WSAStartup(wVersionRequested, &wsaData);
    
    	SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    	while (i) {
    		i--;
    		steady_clock::time_point time_begin = steady_clock::now();
    		SleepPerformUS(Interval_Microseconds);
    		steady_clock::time_point time_end = steady_clock::now();
    		char tmp[128] = {0};
    		uint64_t used = duration_cast<microseconds>(time_end - time_begin).count();
    		snprintf(tmp, 128, "%s Sleep 1000 us, time used : %lld us\n", __FUNCTION__, used);
    		total_used += used;
    		buffer += tmp;
    	}
    	closesocket(s);
    	printf("%s", buffer.c_str());
    	printf("%s Sleep 1000 us, avatar %lld us\n\n", __FUNCTION__, total_used / TEST_TIMES);
    
    }

    结果

    喜出望外~sleep1000us所消耗的时间正好是我们需要的1000us!!!!是不是很心动??

    再试试500us和100us的

    但是!!!!!别高兴太早!!

    从代码里面,我们可以看到这段代码:

    	do {
    		QueryPerformanceCounter((LARGE_INTEGER*)&now);
    	} while ((now.QuadPart - start.QuadPart) / float(perfCnt.QuadPart) * 1000 * 1000 < usec);
    

    这就意味着,这种方式实现的Sleep是不停的在轮训,CPU一直在被占用,我在我的电脑上跑下来,这个轮训会消耗我8%的CPU

    我是6核12线程,就意味着是单线程满负荷

    这个方式虽然好用,经不起CPU的消耗,也是没有办法满足我们需要的!

    那些在推荐别人使用这种方式的人,不知道自己有没有使用这个代码,如果用在业务上了,我很佩服你们的产品!

    六、MsgWaitForMultipleObjectsEx

    代码:

    void Precision_MsgWaitForMultipleObjectsEx()
    {
    	std::string buffer;
    	buffer.assign(BUFFER_SIZE, 0);
    	buffer.clear();
    	int i = TEST_TIMES;
    	uint64_t total_used = 0;
    
    	while (i) {
    		i--;
    		steady_clock::time_point time_begin = steady_clock::now();
    		MsgWaitForMultipleObjectsEx(0, NULL, Interval_Millisceonds, QS_ALLPOSTMESSAGE,
    									MWMO_INPUTAVAILABLE);
    		steady_clock::time_point time_end = steady_clock::now();
    		char tmp[128] = {0};
    		uint64_t used = duration_cast<microseconds>(time_end - time_begin).count();
    		snprintf(tmp, 128, "%s Sleep %d ms, time used : %lld us\n", __FUNCTION__, Interval_Millisceonds, used);
    		total_used += used;
    		buffer += tmp;
    	}
    	printf("%s", buffer.c_str());
    	printf("%s Sleep %d us, avatar %lld ms\n\n", __FUNCTION__, Interval_Millisceonds, total_used / TEST_TIMES);
    
    }
    
    

    结果:

    MsgWaitForMultipleObjectsEx测试下来的时间浮动在1200us左右,最低的出现一次1060us,最高的跑到了1400+us,

     

    综上所述,使用select的方式可以让我们的精度有所提高,相对于windows的Sleep和C++11的sleep_for,还是稍微有点提高,

    后者时间这么接近,sleep_for的实现,不知道下面是不是就直接调用的Sleep。

    另外有个高精度的方式,我没有做测试,从作者给出的时间来看也是很准的,有兴趣的也可以尝试一下

    链接地址:高精度/微秒级线程的实现

     

    展开全文
  • WindowsSleep()

    万次阅读 2014-03-14 17:30:08
    windows下的Sleep()会占用cpu时间,而linux下的sleep()则不会。所以Sleep(0);的调用是如果当前存在与调用该Sleep的线程同级别的线程,则该调用线程会立刻交出时间片给同级别线程,如果没有,则该调用线程会继续占用...

    windows下的Sleep()会占用cpu时间,而linux下的sleep()则不会。所以Sleep(0);的调用是如果当前存在与调用该Sleep的线程同级别的线程,则该调用线程会立刻交出时间片给同级别线程,如果没有,则该调用线程会继续占用cpu时间片。

    展开全文
  • 防止计算机进入屏保或休眠状态,可以指定时间段有效。
  • 最近在ARM上的Linux进行开发,需要将Windows下编写的C程序移植到Linux上去,其中需要将底层的SPI驱动实现...linux-gcc组合,但是在调试过程中,发现很多有趣的问题,其中一个就是关于Windows下的Sleep()函数和Linux下的
  • Windows 电源管理工具 Don't Sleep 中文版 Windows 电源管理工具 Don’t Sleep 中文版 除了“Don’t Sleep”这一事实外,它还具有一个计时器,可以解除时间控制限制,或在指定的时间关闭计算机。 该工具可帮助您更...
  • C++ win32 Sleep()头文件 #include <windows.h>

    千次阅读 2013-07-26 10:05:33
    C++ win32 Sleep()头文件 #include
  • #include “Windows.h” Sleep(TIME_INTERVAL);
  • 主要介绍了Lua中实现sleep函数功能的4种方法,本文讲解了在一个死循环中设置一个跳出条件方法、调用系统的sleep函数法、Windows下ping命令法、socket库中select函数法4种方法,需要的朋友可以参考下
  • windows核心编程之sleep

    千次阅读 2015-07-20 21:18:20
    在多线程编程中经常会用到sleep(),windows核心编程中是这样描述的: 当线程想要告诉系统,它想要在某个时间段内不被调用,这时可以使用sleep函数,当调用sleep后,该线程自愿放弃它剩余的时间片,这时其他的线程就...
  • C语言windows.h库的常用函数(三)

    千次阅读 多人点赞 2019-09-07 21:57:00
    SetCursorPos函数是windows.h库中用来设置指针位置的函数,使用该函数鼠标指针将会直接跳至指定坐标位置 参数 SetCursorPos函数拥有x和y两个整型参数,作为鼠标指针的坐标位置(其中0,0坐标对应屏幕左上角) 示例 #...
  • SLEEP_LATER_HOME运行sleep-later.bat SLEEP_LATER_HOME 但为什么? 因为 Windows 有时真是个混蛋。 这就是为什么。 我的 Windows 安装坚持每晚将我的计算机从睡眠中唤醒,以检查是否有可供下载的 Windows 更新...
  • nodejs中实现sleep功能,暂停几秒

    千次阅读 2019-08-08 19:41:34
    一 背景 在使用nodejs爬虫的时候,经常会遇到别人的网站对频率的反爬机制, 这个时候如果不做处理程序就会挂掉,重新启动也会继续被屏蔽.这个问题怎么解决呢, 我的想法就是程序暂停10分钟或者更长的时间,继续爬取. ...
  • Windows命令行bat批处理延迟sleep方法

    万次阅读 2016-09-29 13:35:58
    Windows下批处理文件没有像Linux一样的Sleep函数进行延时处理。 查找记录两种比较好的办法: 1.使用ping 的定时功能 set SLEEP = ping 127.0 .0 .1 -n ::% SLEEP % 60 2.使用WScirpt的sleep功能 ...
  • 错误为: 未定义标识符 "Sleep" 无法打开 源 文件 "winapifamily.h" 无法打开包括文件: “winapifamily.h”: No such file or directory
  • 格式:timeout /T 延迟秒数 例如,延迟三秒,并且不被键盘输入中断延时: timeout /T 3 /NOBREAK 更多内容可以输入timeout /?查看。
  • linux和windows下 C/C 的sleep函数

    万次阅读 2018-11-05 19:01:39
    linux和windows下 C/C 的sleep函数
  • Sleep函数,在Linux下使用时,是以秒为单位的。但是在Windows下是以毫秒为单位的。 在Linux下,想得到毫秒级的时间间隔,需要使用其他的方法。 把要计时的程序段放在一个比如1000次的循环中,统计出总时间再除1000...
  • linux和windows下,C/C++的sleep函数

    千次阅读 2017-08-30 14:22:01
    sleep  功 能: 执行挂起一段时间  用 法: unsigned sleep(unsigned seconds);  在VC中使用带上头文件  #include  在gcc编译器中,使用的头文件因gcc版本的不同而不同 linux...
  • Windows下批处理文件没有像Linux一样的Sleep函数进行延时处理,这里有2种较为实用的方法实现延迟: 1、使用WScirpt的sleep功能,精度0.001秒 创建vbs延迟文件,然后在批处理文件中调用,使用WScript的 sleep函数,...
  • Linux和Windows下的sleep与usleep的区别

    千次阅读 2018-09-22 10:06:15
    一、sleep (1)头文件 在windows下头文件:#include&lt;windows.h&gt; 在Linux下的头文件:#include&lt;unistd.h&gt; //unistd.h是Linux系统编程中最重要的文件,包含了操作系统为程序员提供的...
  • Linux和windowssleep的使用

    千次阅读 2014-08-06 15:02:07
    用 法: unsigned sleep(unsigned seconds);   在VC中使用带上头文件  #include 在gcc中,使用的头文件因gcc版本的不同而不同 一般来说,linux系统需要添加的头文件为:  #include   ...
  • windows-go-to-sleep-源码

    2021-03-21 17:58:09
    Windows进入睡眠状态 这是一个基于Windows的程序,可在Windows上激活Hibernate模式(S4)。 参考

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,483
精华内容 60,193
关键字:

sleepwindows