使用wxWidgets的事件机制进行线程间通信
wxWidgets是个非常优秀的跨平台库,既可以用来开发GUI程序,也可以用来开发事件驱动的无GUI服务器程序。
wxWidgets的事件处理机制为线程间通信提供了又一个便利的方法。下面是具体步骤:
1、头文件中定义事件ID或直接使用wxID_ANY;
#define ID_MY_THREAD_EVENT
2、主线程中定义事件处理函数;
void OnMyThreadEvent(wxThreadEvent& event);
3、事件关联表中增加事件与处理函数的关联;
BEGIN_EVENT_TABLE(MyApp,wxApp)
EVT_THREAD(ID_MY_THREAD_EVENT, MyApp::OnMyThreadEvent)
END_EVENT_TABLE()
4、另一线程中发送事件;
wxThreadEvent e(wxEVT_COMMAND_THREAD, ID_MY_THREAD_EVENT);
e.SetString(_T("Some string"));
wxTheApp->QueueEvent(e.Clone());
5、之前定义的事件处理函数中处理事件。