我想将同步事件从工作线程发送到 UI 主线程。我如何在 wxWidgets 中做到这一点? sample 的链接真的很有帮助

最佳答案

您应该使用 QueueEvent(wxEvent* event) 进行线程间通信。
void wxEvtHandler::QueueEvent(wxEvent* event)
wxDocumentation 指出:

QueueEvent() 可用于从工作线程到主线程的线程间通信,从某种意义上说它是安全的,它在内部使用锁定并避免了 AddPendingEvent() 文档中提到的问题,通过确保事件对象不再被调用线程使用。仍应注意避免该对象的某些字段被它使用,特别是事件对象的任何 wxString 成员不能是另一个 wxString 对象的浅拷贝,因为这会导致它们仍然使用相同的字符串后台缓冲。

你可以这样做:

wxCommandEvent* evt = new wxCommandEvent();

// NOT evt->SetString(str) as this would be a shallow copy
evt->SetString(str.c_str()); // make a deep copy

wxTheApp->QueueEvent( evt );

希望这会有所帮助。

关于wxwidgets - wxWidgets 中的 SendMessage 等价物是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3641956/

10-13 09:28