は、次のコードを考えてみましょう:私はcrossValidate()
が呼び出されたとき、プログラム全体がcrossValidate()
実行に時間がかかるという理由だけで、凍結されたことが実現するまでC++ WINAPI - ボタンをクリックしたときに、新しいスレッドが致命的なエラーが発生し
static void crossValidate(HWND hwnd) {
// Do-stuff (image processing mostly)
cv::imshow("ROC CURVE", roc);
cv::waitKey(1);
}
static LRESULT mainOnCommand(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
int wmId = LOWORD(wParam);
int wmEvent = HIWORD(wParam);
switch (wmId) {
// ...
case IDMC_CROSSVALID: { crossValidate(hwnd); break; }
// ...
}
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
// ...
case WM_COMMAND: return mainOnCommand(hwnd, msg, wParam, lParam); break;
// ...
}
すべてが素晴らしかったです終了し、ウィンドウは他のメッセージを受信できません。私が必要とするのは、crossValidate()
の新しいスレッドを開始することです。そして、それは私がやったまさにです:
std::thread crossValidateThread; // global
// ...
// ...
// Inside mainOnCommand()
// ...
case IDMC_CROSSVALID: { crossValidateThread = std::thread(crossValidate,hwnd); break; }
// ...
は今プログラムが凍結されていなかったが、私は2つの新しい問題を抱えて:
1)crossValidate()
仕上げが、それは実行だときは、ROC曲線を表示するウィンドウは、単に消える(2最後を参照してください初回のみを動作crossValidate()
crossValidate()
内のコードの行)
2)。私は何を意味して初めて、私は(消えまだROCウィンドウ)ボタンcrossValidate()
実行をクリックしていることですが、私はボタンをもう一度押すと、それは最初の実行だ後にプログラムが致命的なエラーでクラッシュします。
デバッガでプログラムを実行した場合、あなたはどのような結果を得るのですか?まあ@xaxxon – xaxxon
は、私がvs13を使用し、それがないすべてははい、それが消えてしまうことを意味するものではありません致命的なエラー – DimChtz
@Someprogrammerdudeを言って、ウィンドウが表示されています。私はスレッドを切り離すべき私は 'crossValidateは()'ウィンドウが – DimChtz