【发布时间】:2013-11-13 16:26:21
【问题描述】:
我有一个用 C++ 编写的控制台 Windows 应用程序,它为某些分步游戏的给定级别找到解决方案(或证明不存在解决方案)。我们称它为“求解器”。此应用程序从 Python 脚本循环启动,适用于所有游戏关卡。有些关卡太难了,需要几个小时甚至几天才能解决。
如果我的应用程序可以输出一些字符串,例如“太难级别”并退出,从而允许 Python 脚本进入下一个级别,如果它未能找到解决方案(或证明其不存在),这是可以接受的比如说 30 分钟。
如何在求解器启动 30 秒后中断它?从技术上讲,求解算法只是一个从int main() 调用的递归过程。
我正在考虑创建辅助线程,该线程将在启动后 30 分钟唤醒并设置一些布尔标志。并且主要(解决)线程会定期检查这个标志。
这可行,但没有更简单更优雅的解决方案吗?
【问题讨论】:
-
您还可以使用
std::chrono::system_clock::now()捕获开始时间并检查循环中的时差。但是,您提出的解决方案可能更经济。不过,您必须注意布尔值的同步。 -
@DmitryLedentsov 与其说是同步,不如说是错误缓存的危险。任何种族都是良性的。需要一个原子。
标签: c++ multithreading winapi timer