このコードを実行すると、スレッドのメッセージ ボックスがポップされた後にテキストが更新されます。
void PnlOptions::ClickHandler() {
SetWindowText(txt_progress_, "CLASS MEMBER FUNCTION");
HANDLE hThread = (HANDLE) _beginthreadex(0, 0, &ThreadProcess, 0, CREATE_SUSPENDED, 0);
ResumeThread(hThread);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}
unsigned int __stdcall ThreadProcess(void * data0) {
MessageBox(NULL, "THREAD FREE FUNCTION", "Alert", MB_OK);
}
だったからだと思いました
スレッドが実行可能な状態で作成された場合 (つまり、CREATE_SUSPENDED フラグが使用されていない場合)、スレッドは CreateThread が戻る前、特に呼び出し元が作成されたスレッドのハンドルと識別子を受け取る前に実行を開始できます。
ただし、中断されていないスレッドを使用すると、同じ結果になります。
また試しました:
使用する
CreateThread
スレッドの優先度の変更
SendMessage
の代わりに使用SetWindowText
PeekMessage
UI が更新される前にスレッドが開始されるのはなぜですか?
宣言:
pnl_options.h:
unsigned int __stdcall ThreadProcess(void *);
public PnlOptions:
void Init(HWND);
void ClickHandler();
private:
HWND txt_progress_;
pnl_options.cpp (上記のコード以外):
void PnlOptions::Init(HWND hwnd0) {
txt_progress_ = CreateWindowEx (0,
TEXT("EDIT"), "Press \"GO\" to process all selected files.",
SS_LEFT | SS_CENTERIMAGE | WS_VISIBLE | WS_CHILD,
0, 0, 0, 0,
hwnd0, (HMENU) IDT_PROGRESSTEXT, NULL, NULL
);
}