具体来说,我试图延迟a = 1 + 1
10秒钟。在此期间,我希望用户能够输入值。
如果用户没有及时回复,我会a = 1 + 1
制作a = 2
,这会导致炸弹爆炸并杀死用户。
我尝试使用Sleep,但这会暂停整个程序,并且不允许来自用户的输入。如何让系统同时执行两个任务,用户在10秒内更改禁用炸弹并使其不会熄灭?
答案 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)。
对于不那么复杂的任务而言,并发性有点过分。