睡了几毫秒

我知道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一些有用的答案。

根据你的平台,你可能有nanosleepnanosleep可用。 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呼叫是一种更精确的方法(睡眠时间可以在纳秒内指定)。

在具有selectfunction(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 }