[原创]线程之间的通信

类别:编程语言 点击:0 评论:0 推荐:
大家知道一个进程是由至少一个线程组成的,多个线程之间的协同工作是相对较为复杂的,这里主要给大家说一下常用的两种线程之间的通信方式。 线程可以分为工作者线程和窗口线程(即在线程里创建一个附加的隐藏窗口)。 工作者线程是大家最为常用的线程,工作者线程间的同步要用信号量机制操作,举一个例子 //工作者线程1 void CThreadTest::WorkThread1(LPVOID lpParam) { while(1) { //useful codes //当有事件通知工作者线程2时 SetEvent(m_hThread2); } } //工作者线程2 void CThreadTest::WorkThread2(LPVOID lpParam) { while(1) { WaitForSingleObject(m_hThread2,...);//等待m_hThread2事件被激活,等待多个事件用WaitForMultipleObject(...) //useful codes } } 什么?这种方式怎么传参数?有成员变量撒(!·#¥%·fs%—¥%) 窗口线程刚刚说了是线程创建了一个隐藏的窗口,这个窗口具有自己的消息队列和消息处理(通常派生于CWnd类),看一个例子 class CMyWnd : public CWnd ... void CMyThread::OnInitialize() { CMyWnd *m_pMyWnd = new CMyWnd; m_pMyWnd = CreateEx(....);//创建窗口 m_hMyWnd = m_pMyWnd->GetSafeHwnd();//m_hMyWnd为窗口的句柄 } 显然,线程有了窗口句柄,那么我们要联系它就可以通过向它发送消息:)方便啦 PostMessage(m_hMyWnd,..go to hell..);//:p 两种方式大致的说了一下,前者是信号量机制那么后者就是消息机制,这两种机制在使用时存在一个效率问题,打个比方:削一个苹果,如果前者效率是100%的话,那么后者效率可能是98%或者99%。既然差的不多那么当然用好用的喽,没错,推荐大家用第二种方式,Windows吗,不用Window用什么列?:)除非在特别需要的地方用第一种方式。 Windows的博大精神是需要我们认真去寻味的,毕竟是微软的几千名精英智慧的结晶。 ------------------------------------------------------ 此篇仅做为编程的心得,若有雷同纯属见鬼,希望高手批评指正

本文地址:http://com.8s8s.com/it/it22368.htm