Skip to content

Commit

Permalink
wait for thread terminations
Browse files Browse the repository at this point in the history
  • Loading branch information
katahiromz committed Apr 1, 2024
1 parent 52ddaae commit d4c170d
Show file tree
Hide file tree
Showing 6 changed files with 11 additions and 11 deletions.
2 changes: 2 additions & 0 deletions XG_CancelFromWordsDialog.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ class XG_CancelFromWordsDialog : public XG_Dialog
::KillTimer(hwnd, uTimerID);
// 計算時間を求めるために、終了時間を取得する。
xg_dwlTick2 = ::GetTickCount64();
// スレッドを待つ。
XgWaitForThreads();
// ダイアログを終了する。
::EndDialog(hwnd, IDOK);
} else {
Expand Down
2 changes: 2 additions & 0 deletions XG_CancelGenBlacksDialog.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ class XG_CancelGenBlacksDialog : public XG_Dialog
::KillTimer(hwnd, uTimerID);
// 計算時間を求めるために、終了時間を取得する。
xg_dwlTick2 = ::GetTickCount64();
// スレッドを待つ。
XgWaitForThreads();
// ダイアログを終了する。
::EndDialog(hwnd, IDOK);
// スレッドを閉じる。
Expand Down
2 changes: 2 additions & 0 deletions XG_CancelSmartSolveDialog.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ class XG_CancelSmartSolveDialog : public XG_Dialog
::KillTimer(hwnd, uTimerID);
// 計算時間を求めるために、終了時間を取得する。
xg_dwlTick2 = ::GetTickCount64();
// スレッドを待つ。
XgWaitForThreads();
// 解を求めようとした後の後処理。
XgEndSolve();
// ダイアログを終了する。
Expand Down
2 changes: 2 additions & 0 deletions XG_CancelSolveDialog.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@ class XG_CancelSolveDialog : public XG_Dialog
::KillTimer(hwnd, uTimerID);
// 計算時間を求めるために、終了時間を取得する。
xg_dwlTick2 = ::GetTickCount64();
// スレッドを待つ。
XgWaitForThreads();
// 解を求めようとした後の後処理。
XgEndSolve();
// ダイアログを終了する。
Expand Down
2 changes: 2 additions & 0 deletions XG_CancelSolveNoAddBlackDialog.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ class XG_CancelSolveNoAddBlackDialog : public XG_Dialog
::KillTimer(hwnd, uTimerID);
// 計算時間を求めるために、終了時間を取得する。
xg_dwlTick2 = ::GetTickCount64();
// スレッドを待つ。
XgWaitForThreads();
// 解を求めようとした後の後処理。
XgEndSolve();
// ダイアログを終了する。
Expand Down
12 changes: 1 addition & 11 deletions crossword_generation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,17 +119,6 @@ inline void reset() noexcept {
#endif
}

// 生成済みかキャンセル済みかを待つ。このような待ち方はモダンではない。
// ここのコードはモダンな方法に置き換えられるべき。
inline void wait_for_threads(int num_threads = get_num_processors(), int retry_count = 3) {
constexpr int INTERVAL = 100;
for (int i = 0; i < retry_count; ++i) {
if (s_generated || s_canceled)
break;
std::this_thread::sleep_for(std::chrono::milliseconds(INTERVAL));
}
}

// 連結性を判定。
template <typename t_string>
inline bool
Expand Down Expand Up @@ -2031,6 +2020,7 @@ struct non_add_block_t {
try {
// スレッドを生成。切り離す。
std::thread t(generate_proc, pboard, pwords, i);
xg_ahThreads[i] = t.native_handle();
t.detach();
} catch (std::system_error&) {
delete pboard;
Expand Down

0 comments on commit d4c170d

Please sign in to comment.