在C ++中,如何在继续整个程序的同时延迟程序的一部分?

时间:2018-03-20 18:07:11

标签: c++ function loops sleep

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

如果用户没有及时回复,我会a = 1 + 1制作a = 2,这会导致炸弹爆炸并杀死用户。

我尝试使用Sleep,但这会暂停整个程序,并且不允许来自用户的输入。如何让系统同时执行两个任务,用户在10秒内更改禁用炸弹并使其不会熄灭?

3 个答案:

答案 0 :(得分:1)

  

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

答案是并发。

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

为了进一步阅读,我想推荐使用C ++ Concurrency in Action:Anthony Williams的实用多线程。

答案 1 :(得分:1)

答案取决于具体情况。

如果您通过阻止当前线程的方法获取输入,例如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.";
}

答案 2 :(得分:0)

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

最简单的解决方案是使用&#39;消息循环&#39;和勾选/时间控制功能(即GetTickCount,QueryPerformance,timeGetTime)。

对于不那么复杂的任务而言,并发性有点过分。