怎么实现子线程与主线程间的消息传递
1个回答
展开全部
如何实现子线程与主线程间的消息传递
www.MyException.Cn 网友分享于:2013-07-10 浏览:150次
怎么实现子线程与主线程间的消息传递
小弟最近新接触C++,现在有这样一种需求,就是子线程中运行一个while死循环,每执行完一次while循环,给主线程发一消息(event?),主线程接收消息后,执行一段消息响应函数,子线程和主线程函数分别在两个不同的类中.
即类A为主线程,主线程中打开一个子线程,线程函数为类B中的函数funB,funB给类A发消息后,在主线程中执行类A中的响应函数funA.请问在类A和B中代码分别应该怎么写……谢谢!
分享到:
------解决方案--------------------
如是窗口程序,让子线程向主线程创建的窗口发自定义消息,用SendMessage(子线程会待主线程处理完毕)或PostMessage(子线程发送消息后就继续自己的事)。
如果不是窗口程序,就必需让主线程轮询,可以用一个flag,子线程设置flag,主线程定期检查flag,如果被置位,则进行相应处理并将flag复位。flag用临界区保护,这种方法除了在两个线程同时入临界区时以外,主线程不会被阻塞。当然也可以用Event,子线程SetEvent,主线程定期WaitForSingleObject,把超时设为1。如果子线程需要等待主线程的处理,就再加一个Event,子线程设置flag/触发Event1之后等特第二个Event,主线程处理完毕后触发第二个Event。
参见MSDN:
SendMessage
PostMessage
InitializeCriticalSectionEx
EnterCriticalSection
LeaveCriticalSection
CreateEventEx
OpenEvent
SetEvent
PulseEvent
ResetEvent
www.MyException.Cn 网友分享于:2013-07-10 浏览:150次
怎么实现子线程与主线程间的消息传递
小弟最近新接触C++,现在有这样一种需求,就是子线程中运行一个while死循环,每执行完一次while循环,给主线程发一消息(event?),主线程接收消息后,执行一段消息响应函数,子线程和主线程函数分别在两个不同的类中.
即类A为主线程,主线程中打开一个子线程,线程函数为类B中的函数funB,funB给类A发消息后,在主线程中执行类A中的响应函数funA.请问在类A和B中代码分别应该怎么写……谢谢!
分享到:
------解决方案--------------------
如是窗口程序,让子线程向主线程创建的窗口发自定义消息,用SendMessage(子线程会待主线程处理完毕)或PostMessage(子线程发送消息后就继续自己的事)。
如果不是窗口程序,就必需让主线程轮询,可以用一个flag,子线程设置flag,主线程定期检查flag,如果被置位,则进行相应处理并将flag复位。flag用临界区保护,这种方法除了在两个线程同时入临界区时以外,主线程不会被阻塞。当然也可以用Event,子线程SetEvent,主线程定期WaitForSingleObject,把超时设为1。如果子线程需要等待主线程的处理,就再加一个Event,子线程设置flag/触发Event1之后等特第二个Event,主线程处理完毕后触发第二个Event。
参见MSDN:
SendMessage
PostMessage
InitializeCriticalSectionEx
EnterCriticalSection
LeaveCriticalSection
CreateEventEx
OpenEvent
SetEvent
PulseEvent
ResetEvent
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询