我正在努力解决我遇到的设计困境。
ClassWithLongOperation
{
Run()
{
RecrusiveOperation();
}
RecrusiveOperation()
{
/* RECURSION */
}
}
MyThread
{
ClassWithLongOperation Op1(10);
Op1.Run(); // Takes several minutes.
ClassWithLongOperation Op2(20);
Op2.Run();
SomeOtherClassWithLongOperation Op3;
Op3.Run();
// Do some other stuff
}
GUI 启动MyThread,它运行了 5-6 分钟。我希望能够在我的 GUI 上有一个大的取消按钮,以便用户可以取消操作。
我可以创建一个全局布尔变量bCancelled,并检查它是否已在RecursiveOperation中设置,但我想成为一名优秀的 C++ 和 OO 程序员并避免使用全局变量。特别是如果它们必须分布在多个文件中。
那么我将如何(遵循良好的设计)安全地取消MyThread?我可以在我的设置中进行哪些更改以允许这样做?
我也_beginthreadex
用来启动线程,但如果它允许更简单的解决方案,我可以使用 boost。