2023-05-14 07:00:05

休眠毫秒

我知道POSIX休眠(x)函数使程序休眠x秒。C++中是否有一个函数可以让程序休眠x毫秒?


当前回答

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

#包括<windows.h>

然后使用Sleep();///Sleep()带有大写S,而不是Sleep()带有S。

//睡眠(1000)可能是1秒///。

clang支持sleep(),sleep(1)表示1秒延时/等待。

其他回答

注意,没有毫秒的标准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()函数使用的单位。

这个问题由来已久,但我设法找到了一个在我的应用程序中实现这一点的简单方法。您可以创建如下所示的C/C++宏:

#ifndef MACROS_H
#define MACROS_H

#include <unistd.h>

#define msleep(X) usleep(X * 1000)

#endif // MACROS_H

选择调用是一种提高精度的方法(睡眠时间可以以纳秒为单位)。

在具有选择功能的平台(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.
    }
}

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