我知道POSIXsleep(x)函数使程序休眠x秒。是否有一个函数使程序在C++休眠x毫秒?
sleep(x)
请注意,毫秒没有标准的C API,因此(在Unix上)您必须满足于usleep,它接受微秒:
usleep
#include <unistd.h> unsigned int microseconds;...usleep(microseconds);
为了保持便携,你可以使用提升::线程来睡觉:
#include <boost/thread/thread.hpp> int main(){//waits 2 secondsboost::this_thread::sleep( boost::posix_time::seconds(1) );boost::this_thread::sleep( boost::posix_time::milliseconds(1000) ); return 0;}
这个答案是重复的,以前已经发布在这个问题。也许你也可以在那里找到一些有用的答案。
nanosleep是比usleep更好的选择-它对中断更有弹性。
nanosleep
根据您的平台,您可能有usleep或nanosleep可用。usleep已被弃用,并已从最新的POSIX标准中删除;首选nanosleep。
在Unix中,您可以使用usleep。
在Windows中,有Sleep。
Sleep
选择调用是一种具有更高精度的方式(睡眠时间可以以纳秒为单位指定)。
在C++11中,您可以使用标准库设施执行此操作:
#include <chrono>#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(x));
清晰易读,不再需要猜测sleep()函数需要什么单元。
sleep()
#include <windows.h>
语法:
Sleep ( __in DWORD dwMilliseconds );
用法:
Sleep (1000); //Sleeps for 1000 ms or 1 sec
为什么不使用time.h库?在Windows和POSIX系统上运行(不要在生产中使用此代码!):
time.h
CPU保持IDLE状态:
#include <iostream>#ifdef _WIN32#include <windows.h>#else#include <unistd.h>#endif // _WIN32 using namespace std; void sleepcp(int milliseconds); void sleepcp(int milliseconds) // Cross-platform sleep function{#ifdef _WIN32Sleep(milliseconds);#elseusleep(milliseconds * 1000);#endif // _WIN32}int main(){cout << "Hi! At the count to 3, I'll die! :)" << endl;sleepcp(3000);cout << "urrrrggghhhh!" << endl;}
在C++中休眠程序的方法是Sleep(int)方法。它的头文件是#include "windows.h."
Sleep(int)
#include "windows.h."
例如:
#include "stdafx.h"#include "windows.h"#include "iostream"using namespace std; int main(){int x = 6000;Sleep(x);cout << "6 seconds have passed" << endl;return 0;}
它的睡眠时间以毫秒为单位,没有限制。
Second = 1000 millisecondsMinute = 60000 millisecondsHour = 3600000 milliseconds
如果使用MS VisualC++10.0,您可以使用标准库工具执行此操作:
Concurrency::wait(milliseconds);
您将需要:
#include <concrt.h>
在具有select函数的平台(POSIX、Linux和Windows)上,您可以执行以下操作:
select
void sleep(unsigned long msec) {timeval delay = {msec / 1000, msec % 1000 * 1000};int rc = ::select(0, NULL, NULL, NULL, &delay);if(-1 == rc) {// Handle signals by continuing to sleep or return immediately.}}
然而,现在有更好的选择。
使用Boost异步输入/输出线程,休眠x毫秒;
#include <boost/thread.hpp>#include <boost/asio.hpp> boost::thread::sleep(boost::get_system_time() + boost::posix_time::millisec(1000));
作为POSIX系统的Win32替代品:
void Sleep(unsigned int milliseconds) {usleep(milliseconds * 1000);} while (1) {printf(".");Sleep((unsigned int)(1000.0f/20.0f)); // 20 fps}
这个问题很老,但我设法找到了一种在我的应用程序中使用它的简单方法。你可以创建一个C/C++宏,如下所示使用它:
#ifndef MACROS_H#define MACROS_H #include <unistd.h> #define msleep(X) usleep(X * 1000) #endif // MACROS_H
从C++14使用std和它的数字文字:
#include <chrono>#include <thread> using namespace std::chrono_literals; std::this_thread::sleep_for(123ms);
#include <chrono>#include <thread> std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // sleep for 1 second
请记住导入两个标题。
对于C使用///在gcc中。
#包含
然后使用带大写S的睡眠(); /// 睡眠()而不是带s的睡眠()。
//睡眠(1000)是1秒。
clang支持睡眠(),睡眠(1)是1秒的时间延迟/等待。
我用这个:
#include <thread>#define sleepms(val) std::this_thread::sleep_for(val##ms)
例子:
sleepms(200);
优雅的解决方案来自一个答案,位修改…如果没有更好的功能可用,可以轻松添加选择()用法。只需创建使用选择()等的函数…
代码:
#include <iostream> /*Prepare defines for millisecond sleep function that is cross-platform*/#ifdef _WIN32# include <Windows.h># define sleep_function_name Sleep# define sleep_time_multiplier_for_ms 1#else# include <unistd.h># define sleep_function_name usleep# define sleep_time_multiplier_for_ms 1000#endif /* Cross platform millisecond sleep */void cross_platform_sleep_ms(unsigned long int time_to_sleep_in_ms){sleep_function_name ( sleep_time_multiplier_for_ms * time_to_sleep_in_ms );}