C++,我怎样才能在继续整个程序的同时延迟程序的一部分

In C++, how can I delay a part of a program while continuing with the overall program?

本文关键字:程序 时延 一部分 延迟 继续 C++      更新时间:2023-10-16

具体来说,我试图将a = 1 + 1延迟 10 秒。在此期间,我希望用户能够输入一个值。

如果用户没有及时响应,我会a = 1 + 1做出a = 2,这将导致炸弹爆炸并杀死用户。

我尝试使用Sleep,但这会使整个程序停止并且不允许用户输入。如何使系统同时执行这两个任务,其中用户在 10 秒内进行了更改以禁用炸弹并使其不爆炸?

如何使系统同时执行这两项任务?

答案是并发。

例如 2 个线程,一个用于第一个任务,另一个用于第二个任务。以及他们之间同步的雨滴。

为了进一步阅读,我想推荐 C++ Anthony Williams 的 Concurrency in Action: Practical Multithreading。

答案取决于情况。

如果您通过阻止当前线程的方法(如std::cin(获取输入,则可能需要线程。

但是,如果您通过非阻塞的方式获取输入,那么测量时间间隔将是一个有效的解决方案,因为您可以在达到时间限制后立即退出。对于这种情况,您可以通过std::chrono来测量时间。

#include <iostream>
#include <string>
#include <chrono>
int main()
{
    using clock = std::chrono::steady_clock;
    auto start = clock::now();
    while (std::chrono::duration_cast<std::chrono::milliseconds>(clock::now() - start).count() < 2000) {
    }
    std::cout << "Took two seconds to complete.";
}

您不需要使用 Sleep,也不需要使用多线程来完成任务。

最简单的解决方案是使用"消息循环"和即时报价/时间控制函数(即GetTickCount,QueryPerformance,timeGetTime(。

对于一个不太复杂的任务来说,并发有点矫枉过正。