我想将同步事件从工作线程发送到 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/