私は C++ FLTK アプリケーションに取り組んでいます。これは、以下のコードを使用してスレッド内にモーダル ウィンドウを作成および表示するマルチスレッド アプリケーションです。
Fl_Double_Window* dlg = new Fl_Double_Window(0, 0, 200, 100);
...
dlg->set_modal();
Fl::visual(FL_DOUBLE|FL_INDEX);
dlg->show();
次に、同じスレッドで新しいスレッドを作成し、Fl_Double_Window
オブジェクトへのポインターをスレッドパラメーターとして渡します。
CreateThread(
NULL, // default security attributes
0, // use default stack size
&beginProgress, // thread function name
(LPVOID) dlg, // argument to thread function
0, // use default creation flags
NULL);
&私のスレッド関数では、いくつかの操作を行います&その後、表示中のモーダルウィンドウを非表示にする必要があります:
DWORD WINAPI beginProgress(LPVOID args)
{
//do some operations
((Fl_Double_Window*)args)->hide();
return 0;
}
ここでの問題は、私のコードがエラーなしで正常に実行されることですが、オブジェクト ポインターhide
のメソッドを実行した後dlg
、ウィンドウは非表示にならず、使用してウィンドウ オブジェクトを呼び出しhide
たり削除したりしdelete dlg
ても効果がありません。
この問題はマルチスレッドの動作に関連していると思いますが、問題の原因と解決方法を推測できません。