多线程的使用及线程的通信

       一,线程的使用

             由于并没有对多线程的深入,只是一些基本的介绍

               1. wxthread:

                   (1) 两种线程:

                       a.分离线程:在创建后,不需要再进行管理,自己会结束,释放资源:在析构函数中会自己delete掉这个对象

                       因此  分离线程必须创建在堆上,使用new创建                                   wxTHREAD_DETACHED

                       b.联合线程:需要调用wait()来释放资源, 并且需要自己删除对象,可以建立堆上亦可以建立在栈上,不过一般是建立在堆上的;                                                              wxThrEAD_JOINABLE

                (2):建立方法;

                                 先建立一个实例->Create()- >Run() 执行entry方法。 

         二,线程的通信;

                     基于wxwidgets 的事件机制,我们能够更加方便的实现线程的通信;

                   1.  经过自己的实践发现:

                           子线程发出事件消息代码:

wxThreadEvent e(wxEVT_COMMAND_THREAD, ID_MY_THREAD_EVENT);
e.SetString(_T(
"Some string"));
wxTheApp
->QueueEvent(e.Clone());

    wxTheApp 全局变量,跨越整个项目周期

          2.如果是上面的代码: 需要在自定义的xxxapp类创建一个事件表,并且对他维护,这样发出的消息

才能被app收到,而这样,窗体是无法接收到子线程发出的事件消息,因为不是窗体来接受:

         3.将

         

wxTheApp->QueueEvent(e.Clone());

改成

:
 wxTheApp->GetTopWindow()->GetEventHandler()->AddPendingEvent(e);

             再在主窗体上定义相应的接收事件,就能够获取子线程发出的事件消息,并且执行对应的事件处理。  

  以下是wxwidgets 线程通信的官方资料:

       https://wiki.wxwidgets.org/Inter-Thread_and_Inter-Process_communication:

   希望对于了解wxwidgets线程通信有所帮助!

  

                 


你可能感兴趣的:(多线程的使用及线程的通信)