C++中的睡眠函数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1658386/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Sleep function in C++
提问by GManNickG
Is there a function like Sleep(time);
that pauses the program for X milliseconds, but in C++?
是否有类似的函数Sleep(time);
将程序暂停 X 毫秒,但在 C++ 中?
Which header should I add and what is the function's signature?
我应该添加哪个标头以及函数的签名是什么?
回答by GManNickG
Use std::this_thread::sleep_for
:
使用std::this_thread::sleep_for
:
std::chrono::milliseconds timespan(111605); // or whatever
std::this_thread::sleep_for(timespan);
There is also the complementary std::this_thread::sleep_until
.
还有互补的std::this_thread::sleep_until
。
Prior to C++11, C++ had no thread concept and no sleep capability, so your solution was necessarily platform dependent. Here's a snippet that defines a sleep
function for Windows or Unix:
在 C++11 之前,C++ 没有线程概念和睡眠功能,因此您的解决方案必然依赖于平台。这是sleep
为 Windows 或 Unix定义函数的片段:
#ifdef _WIN32
#include <windows.h>
void sleep(unsigned milliseconds)
{
Sleep(milliseconds);
}
#else
#include <unistd.h>
void sleep(unsigned milliseconds)
{
usleep(milliseconds * 1000); // takes microseconds
}
#endif
But a much simpler pre-C++11 method is to use boost::this_thread::sleep
.
但是一个更简单的 C++11 之前的方法是使用boost::this_thread::sleep
.
回答by Jostein Topland
You'll need at least C++11.
你至少需要 C++11。
#include <thread>
#include <chrono>
...
std::this_thread::sleep_for(std::chrono::milliseconds(200));
回答by dicroce
On Unix, include #include <unistd.h>
.
在 Unix 上,包括#include <unistd.h>
.
The call you're interested in is usleep()
. Which takes microseconds, so you should multiply your millisecond value by 1000 and pass the result to usleep()
.
您感兴趣的电话是usleep()
。这需要微秒,因此您应该将毫秒值乘以 1000 并将结果传递给usleep()
.
回答by Dani
For Windows:
对于 Windows:
#include "windows.h"
Sleep(10);
For Unix:
对于 Unix:
#include <unistd.h>
usleep(10)
回答by alexkr
回答by Prasang Singhal
Just use it...
就用它...
Firstly include the unistd.h
header file, #include<unistd.h>
, and use this function for pausing your program execution for desired number of seconds:
首先包含unistd.h
头文件 ,#include<unistd.h>
并使用此函数将程序执行暂停所需的秒数:
sleep(x);
x
can take any value in seconds.
x
可以在几秒钟内取任何值。
If you want to pause the program for 5 seconds it is like this:
如果你想暂停程序 5 秒钟,它是这样的:
sleep(5);
It is correct and I use it frequently.
这是正确的,我经常使用它。
It is valid for C and C++.
它对 C 和 C++ 有效。
回答by Merav Kochavi
The simplest way I found for C++ 11 was this:
我为 C++ 11 找到的最简单的方法是:
Your includes:
您的包括:
#include <chrono>
#include <thread>
Your code (this is an example for sleep 1000 millisecond):
您的代码(这是 sleep 1000 毫秒的示例):
std::chrono::duration<int, std::milli> timespan(1000);
std::this_thread::sleep_for(timespan);
The duration could be configured to any of the following:
持续时间可以配置为以下任何一项:
std::chrono::nanoseconds duration</*signed integer type of at least 64 bits*/, std::nano>
std::chrono::microseconds duration</*signed integer type of at least 55 bits*/, std::micro>
std::chrono::milliseconds duration</*signed integer type of at least 45 bits*/, std::milli>
std::chrono::seconds duration</*signed integer type of at least 35 bits*/, std::ratio<1>>
std::chrono::minutes duration</*signed integer type of at least 29 bits*/, std::ratio<60>>
std::chrono::hours duration</*signed integer type of at least 23 bits*/, std::ratio<3600>>