我知道 POSIX sleep(x)
函数可以让程序休眠 x 秒。那么在 C++ 中是否有函数可以让程序休眠 x 毫秒 呢?
在C++11中,您可以使用标准库设施来实现此目的:
#include <chrono>
#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(x));
清晰易读,不再需要猜测 sleep()
函数使用的单位。
sleep_for
for that?这是翻译的结果:
这是一个忙碌的睡眠吗?我需要在睡眠期间让出给另一个线程;我可以使用 sleep_for
吗? - Michael请注意,没有标准的C API可用于毫秒级操作,因此(在Unix系统中),您需要使用接受微秒参数的usleep
函数:
#include <unistd.h>
unsigned int microseconds;
...
usleep(microseconds);
usleep
吗? - Michaelusleep()
已经被弃用,因此我在这里编写了一个示例,展示如何编写自己的sleep_us()
(或usleep()
)函数,作为nanosleep()
的包装器。 - Gabriel Staples为保持可移植性,您可以使用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;
}
这个答案是一个重复的,已经在这个问题中发布过。也许你可以在那里找到一些可用的答案。
boost::this_thread::sleep
会向您的代码添加一个中断点。 - Martin Meeser根据您所使用的平台,您可能拥有usleep
或nanosleep
。 usleep
已弃用并已从最新的POSIX标准中删除;nanosleep
更受推荐。
<unistd.h>
中声明了 usleep()
函数,但令人困惑的是 nanosleep()
函数却在 <time.h>
/<ctime>
中声明。 - gbmhunter使用C++14中的std和数字字面量:
#include <chrono>
#include <thread>
using namespace std::chrono_literals;
std::this_thread::sleep_for(123ms);
123ms
看起来有点奇怪。 - vy32long double operator "" ms(long double)
在我看来,这比 chrono::milliseconds(1000)
更易读。
有关更多信息,请参见用户定义的字面值。 - Martin Flaska#include <chrono>
#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // sleep for 1 second
记得导入这两个头文件。
为什么不使用time.h
库?它可以在Windows和POSIX系统上运行(请勿在生产中使用此代码!):
CPU保持空闲状态:
#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;
}
#ifdef WIN32
不会被评估为真。 - kayleeFrye_onDeck#ifdef _WIN32
。 - Contangonanosleep
比 usleep
更好 - 它对中断更具韧性。
usleep
,但不熟悉 nanosleep
。请提供在Linux上使用它的示例。 在Linux上使用 nanosleep
的示例代码如下: - jww#include <windows.h>
语法:
Sleep ( __in DWORD dwMilliseconds );
使用方法:
Sleep (1000); //Sleeps for 1000 ms or 1 sec
#include <WinBase.h>
- foobar#include <windows.h>
。 - ʇolɐǝz ǝɥʇ qoq
Sleep()
函数具有毫秒级的精度,但它的准确性可以高达数个数量级。你可能认为你要睡眠4毫秒,但实际上会睡眠400毫秒。 - John Diblingsleep
,而不是 Win32 的Sleep
,因为他提到了“x秒”。 - CB Baileyextern "C" {}
块内。此外,如果您在同一项目中拥有C和C++源文件,强烈建议您这样做以避免任何问题,特别是如果您在两种类型的源文件中都包含相同的头文件(在这种情况下,这是必要的)。如果您有一个纯C++项目,它可能会毫无问题地工作。 - notadamGetTickCount
具有55毫秒的分辨率;后续版本的分辨率为16毫秒或更低。一位用户认为他从Sleep函数中获得了16毫秒的分辨率,但随后报告称Sleep
本身相当准确,表面上的不精确是由于使用GetTickCount
来测量时间的流逝所造成的。 - Qwertieusleep()
。 - Jesper Juhl