当我运行此代码时,文本会在线程中的消息框弹出后更新。
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
);
}