[原创]线程之间的通信

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

大家知道一个进程是由至少一个线程组成的,多个线程之间的协同工作是相对较为复杂的,这里主要给大家说一下常用的两种线程之间的通信方式。

线程可以分为工作者线程和窗口线程(即在线程里创建一个附加的隐藏窗口)。

工作者线程是大家最为常用的线程,工作者线程间的同步要用信号量机制操作,举一个例子

//工作者线程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的博大精神是需要我们认真去寻味的,毕竟是微软的几千名精英智慧的结晶。

------------------------------------------------------

此篇仅做为编程的心得,若有雷同纯属见鬼,希望高手批评指正

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航