C++,我怎样才能在继续整个程序的同时延迟程序的一部分
In C++, how can I delay a part of a program while continuing with the overall program?
具体来说,我试图将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(。
对于一个不太复杂的任务来说,并发有点矫枉过正。
相关文章:
- 重载操作程序时出错>>用于类中的字符串 memebr
- 使用mongocxx驱动程序时包含头文件问题
- 运行程序时出现问题
- 分段错误当我试图运行程序时出错
- libprotobuf 检查在 Mac OS 上执行程序时失败
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 将库链接到另一个应用程序时,CMAKE 找不到库
- C++ 每次运行程序时我都会"nan"输出的问题
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 通过 g++ 运行程序时没有这样的文件或目录
- 使用 Visual Studio 2019 构建 Hello World wxwidgets 应用程序时出错
- 使用 Bazel 编译 QT 应用程序时访问资源
- 我在执行任何程序时被拒绝在 devcpp 中访问
- 在树莓派上用libtorch构建程序时的链接问题
- 在 Ubuntu 服务器上运行 QT 应用程序时崩溃
- 编译 Cilk Plus 程序时遇到问题
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- 在 c++ 中,rand() 在执行有调试和不带调试的程序时生成不同的结果
- QT C++防止关闭应用程序时出现运行时错误
- 在发布模式下启动使用库的静态链接编译的应用程序时出错