操作GUI
wxMutexGuiEnter();
// 进行 GUI 操作
// ...
wxMutexGuiLeave();
在非主线程(非GUI线程)中如果要对GUI进行直接操作就必须使用这种方法,否则会出现同步错误,引起程序非正常终止。
注意这种方法的局限性:多个线程对于GUI的操作严格互锁,交替进行。例如在非GUI线程中有下列代码:
wxMutexGuiEnter();
wxLogDebug(_T("%d..."), i);
wxMutexGuiLeave();
如果下拉主菜单,则Log窗口的输出暂时停止,待菜单回卷后才继续进行。
最安全的方法还是使用自定义命令事件传递,例如在非GUI线程中可以这样:
// send done event to give hint
wxCommandEvent doneEvent(wxEVT_COMMAND_MENU_SELECTED, TESTING_THREAD_DONE);
wxPostEvent(_frame, doneEvent);
TestDestroy() & Delete()
用来停止 work thread。
Continue reading ‘使用 wxWidgets 进行 Multi-threading 编程’ »