睡了几毫秒
我知道POSIX sleep(x)
函数使程序在x秒内睡眠。 有没有一个函数使程序在C ++中hibernatex 毫秒 ?
请注意,毫秒级没有标准C API,因此(在Unix上),您将不得不解决usleep
,该问题接受微秒:
#include <unistd.h> unsigned int microseconds; ... usleep(microseconds);
在C ++ 11中,您可以使用标准库工具来完成此操作:
#include <chrono> #include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(x));
清晰可读,不再需要猜测sleep()
函数需要什么单位。
为了保持便携性,您可以使用Boost :: Thread进行睡眠:
#include <boost/thread/thread.hpp> int main() { //waits 2 seconds boost::this_thread::sleep( boost::posix_time::seconds(1) ); boost::this_thread::sleep( boost::posix_time::milliseconds(1000) ); return 0; }
这个答案是重复的,之前已经发布在这个问题上 。 也许你也可以find一些有用的答案。
根据你的平台,你可能有nanosleep
或nanosleep
可用。 usleep
已被弃用,并已从最新的POSIX标准中删除; nanosleep
是首选。
在Unix中,你可以使用usleep 。
在Windows中有睡眠 。
nanosleep
是比nanosleep
更好的select – 它对中断更有弹性。
为什么不使用time.h库? 在Windows和POSIX系统上运行:
#include <iostream> #include <time.h> using namespace std; void sleepcp(int milliseconds); void sleepcp(int milliseconds) // Cross-platform sleep function { clock_t time_end; time_end = clock() + milliseconds * CLOCKS_PER_SEC/1000; while (clock() < time_end) { } } int main() { cout << "Hi! At the count to 3, I'll die! :)" << endl; sleepcp(3000); cout << "urrrrggghhhh!" << endl; }
更正的代码 – 现在CPU保持空闲状态[2014.05.24]:
#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 WIN32 Sleep(milliseconds); #else usleep(milliseconds * 1000); #endif // win32 } int main() { cout << "Hi! At the count to 3, I'll die! :)" << endl; sleepcp(3000); cout << "urrrrggghhhh!" << endl; }
如果使用MS Visual C ++ 10.0,则可以使用标准库工具完成此操作:
Concurrency::wait(milliseconds);
你会需要:
#include <concrt.h>
#include <WinBase.h>
句法:
Sleep ( __in DWORD dwMilliseconds );
用法:
Sleep (1000); //Sleeps for 1000 ms or 1 sec
Sleep(int)
方法是用C ++来睡眠程序的方法。 它的头文件是#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 milliseconds Minute = 60000 milliseconds Hour = 3600000 milliseconds
select呼叫是一种更精确的方法(睡眠时间可以在纳秒内指定)。
在具有select
function(POSIX,Linux和Windows)的平台上,您可以执行以下操作:
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. } }
不过,现在有更好的select。
使用Boostasynchronousinput/输出线程,hibernatex毫秒;
#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 }