一般开子线程都是为了主线程服务,这样就少不了线程间的通信。

1.使用全局变量进行通信。一般使用volatile关键字。

  使用volatile修饰符,它告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。如果线程间所需传递的信息较复杂,我们可以定义一个结构,通过传递指向该结构的指针进行传递信息。

2.使用自定义消息
  利用Windows操作系统的消息驱动机制,当一个线程发出一条消息时,操作系统首先接收到该消息,然后把该消息转发给目标线程,接收消息的线程必须已经建立了消息循环。
   主线程m_pCalculateThread->PostThreadMessage(WM_CALCULATE,nAddend,NULL);发消息给子线程
   子线程接受到消息之后,ON_THREAD_MESSAGE(WM_CALCULATE,OnCalculate)响应消息,(注意,此处VC9和VC6差异:线程响应消息用ON_THREAD_MESSAGE而不是VC6种的ON_MESSAGE,函数返回值也从Long改成void)  
  完成calculate动作,然后 ::PostMessage((HWND)(GetMainWnd()->GetSafeHwnd()),WM_DISPLAY,nTmpt,NULL);发消息给主线程,更新界面
posted on 2013-08-09 10:42  smartl  阅读(308)  评论(0)    收藏  举报