我知道POSIX sleep(x) 函数使程序休眠x秒 . 是否有一个函数使程序在C中睡眠x毫秒?
sleep(x)
请注意,毫秒没有标准的C API,所以(在Unix上)你将不得不接受 usleep ,它接受微秒:
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() 函数采用的单位 .
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; }
这个答案是重复的,之前发布在this question中 . 也许你也可以找到一些有用的答案 .
在Unix中,您可以使用usleep .
在Windows中有Sleep .
根据您的平台,您可能有 usleep 或 nanosleep . usleep 已弃用,已从最新的POSIX标准中删除; nanosleep 是首选 .
nanosleep
为什么不使用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保持在IDLE状态[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; }
nanosleep 是比 usleep 更好的选择 - 它对中断更具弹性 .
#include <windows.h>
Syntax:
Sleep ( __in DWORD dwMilliseconds );
Usage:
Sleep (1000); //Sleeps for 1000 ms or 1 sec
如果使用MS Visual C 10.0,则可以使用标准库工具执行此操作:
Concurrency::wait(milliseconds);
你会需要:
#include <concrt.h>
在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 milliseconds Minute = 60000 milliseconds Hour = 3600000 milliseconds
选择调用是一种具有更高精度的方法(睡眠时间可以以纳秒为单位指定) .
在具有 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 }
14 回答
请注意,毫秒没有标准的C API,所以(在Unix上)你将不得不接受
usleep
,它接受微秒:在C 11中,您可以使用标准库设施执行此操作:
清晰可读,不再需要猜测
sleep()
函数采用的单位 .为了保持便携性,您可以使用Boost::Thread进行睡眠:
这个答案是重复的,之前发布在this question中 . 也许你也可以找到一些有用的答案 .
在Unix中,您可以使用usleep .
在Windows中有Sleep .
根据您的平台,您可能有
usleep
或nanosleep
.usleep
已弃用,已从最新的POSIX标准中删除;nanosleep
是首选 .为什么不使用time.h库?在Windows和POSIX系统上运行:
更正代码 - 现在CPU保持在IDLE状态[2014.05.24]:
nanosleep
是比usleep
更好的选择 - 它对中断更具弹性 .Syntax:
Usage:
如果使用MS Visual C 10.0,则可以使用标准库工具执行此操作:
你会需要:
在C中睡眠程序的方法是
Sleep(int)
方法 . 它的头文件是#include "windows.h."
例如:
它的睡眠时间以毫秒为单位,没有限制 .
选择调用是一种具有更高精度的方法(睡眠时间可以以纳秒为单位指定) .
在具有
select
功能(POSIX,Linux和Windows)的平台上,您可以执行以下操作:但是,现在有更好的替代品可供选择 .
使用Boost异步输入/输出线程,休眠x毫秒;
作为POSIX系统的Win32替代品: