睡眠毫秒

我知道POSIXsleep(x)函数使程序休眠x秒。是否有一个函数使程序在C++休眠x毫秒

1666412 次浏览

请注意,毫秒没有标准的C API,因此(在Unix上)您必须满足于usleep,它接受微秒:

#include <unistd.h>
unsigned int microseconds;...usleep(microseconds);

为了保持便携,你可以使用提升::线程来睡觉:

#include <boost/thread/thread.hpp>
int main(){//waits 2 secondsboost::this_thread::sleep( boost::posix_time::seconds(1) );boost::this_thread::sleep( boost::posix_time::milliseconds(1000) );
return 0;}

这个答案是重复的,以前已经发布在这个问题。也许你也可以在那里找到一些有用的答案。

nanosleep是比usleep更好的选择-它对中断更有弹性。

根据您的平台,您可能有usleepnanosleep可用。usleep已被弃用,并已从最新的POSIX标准中删除;首选nanosleep

在Unix中,您可以使用usleep

在Windows中,有Sleep

选择调用是一种具有更高精度的方式(睡眠时间可以以纳秒为单位指定)。

在C++11中,您可以使用标准库设施执行此操作:

#include <chrono>#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(x));

清晰易读,不再需要猜测sleep()函数需要什么单元。

#include <windows.h>

语法:

Sleep (  __in DWORD dwMilliseconds   );

用法:

Sleep (1000); //Sleeps for 1000 ms or 1 sec

为什么不使用time.h库?在Windows和POSIX系统上运行(不要在生产中使用此代码!):

CPU保持IDLE状态:

#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 _WIN32Sleep(milliseconds);#elseusleep(milliseconds * 1000);#endif // _WIN32}int main(){cout << "Hi! At the count to 3, I'll die! :)" << endl;sleepcp(3000);cout << "urrrrggghhhh!" << endl;}

在C++中休眠程序的方法是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 millisecondsMinute = 60000 millisecondsHour = 3600000 milliseconds

如果使用MS VisualC++10.0,您可以使用标准库工具执行此操作:

Concurrency::wait(milliseconds);

您将需要:

#include <concrt.h>

在具有select函数的平台(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.}}

然而,现在有更好的选择。

使用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}

这个问题很老,但我设法找到了一种在我的应用程序中使用它的简单方法。你可以创建一个C/C++宏,如下所示使用它:

#ifndef MACROS_H#define MACROS_H
#include <unistd.h>
#define msleep(X) usleep(X * 1000)
#endif // MACROS_H

从C++14使用std和它的数字文字:

#include <chrono>#include <thread>
using namespace std::chrono_literals;
std::this_thread::sleep_for(123ms);
#include <chrono>#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // sleep for 1 second

请记住导入两个标题。

对于C使用///在gcc中。

#包含

然后使用带大写S的睡眠(); /// 睡眠()而不是带s的睡眠()。

//睡眠(1000)是1秒。

clang支持睡眠(),睡眠(1)是1秒的时间延迟/等待。

我用这个:

#include <thread>#define sleepms(val) std::this_thread::sleep_for(val##ms)

例子:

sleepms(200);

优雅的解决方案来自一个答案,位修改…如果没有更好的功能可用,可以轻松添加选择()用法。只需创建使用选择()等的函数…

代码:

#include <iostream>
/*Prepare defines for millisecond sleep function that is cross-platform*/#ifdef _WIN32#  include <Windows.h>#  define sleep_function_name           Sleep#  define sleep_time_multiplier_for_ms      1#else#  include <unistd.h>#  define sleep_function_name           usleep#  define sleep_time_multiplier_for_ms      1000#endif
/* Cross platform millisecond sleep */void cross_platform_sleep_ms(unsigned long int time_to_sleep_in_ms){sleep_function_name ( sleep_time_multiplier_for_ms * time_to_sleep_in_ms );}