私は自分が抱えているデザインの苦境を解決しようとしています。
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 を使用できます。