首页 > 解决方案 > Arduino“延迟”功能的常规 c++ 等价物是什么?

问题描述

我正在尝试在 Visual Studio 中创建倒数计时器。

我尝试过使用“延迟”功能,就好像我在编写 Arduino 程序一样,但错误列表显示它是一个无法识别的功能。

标签: c++

解决方案


std::this_thread::sleep_for 是标准等价物。它在指定的持续时间内暂停当前线程。

例如,这将打印“之前”,等待一秒钟,然后打印“之后”:

#include <chrono>
#include <thread>
#include <iostream>

int main() {
    std::cout << "Before" << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::cout << "After" << std::endl;
}

在事件驱动的上下文(例如 GUI 线程)中使用它时要小心,因为它可能会阻止事件被及时处理并导致您的应用程序挂起或被操作系统杀死。GUI 工具包通常会提供自己的安全替代方案,让他们继续处理事件并避免该问题。


各种平台 API 也提供了类似的功能。最常见的是您会遇到 WindowsSleep或 POSIX sleepusleepnanosleep. 对于可移植性,使用标准是一个好主意std::this_thread::sleep_for,但是如果由于某种原因(使用 C++03 或更早版本,没有标准库等)不可用,则可以使用平台函数。


推荐阅读