学习MFC一段时间,期间经历了很多困惑,至到昨天才突然想明白!事情是这样的,程序中开了多个子线程,每次都在子线程中去切换界面,或者使用TTS播放声音,显示图片,总是没有效果,但是写一个测试程序,总是没有问题(因为测试程序只有一个线程,当时没以为是线程的原因)!最后是用一个定时器解决的,子线程启动一个定时器,把要做的代码放到定时器中!这个问题简直让我痛苦一生啊,很是灰心,因为有了问题,解决不了,总想去寻求他人帮助,可是发现他(思维很灵活)总能给一个办法绕开它,比如开一个定时器,却不知道为什么!
后来我使用TTS的时候,还是不行,突然觉得应该跟线程有关,百度了一下,发现果然是线程的原因!MFC的主线程中有消息队列,可以处理各种界面上的变化!但是用AfxBeginThread创建的线程没有消息队列,而且界面上的东西只能使用主线程来干!其实也很好理解,主线程是UI线程,子线程专门来处理逻辑,要想让主线程播放TTS,创建自定义消息,子线程去通知主线程(::PostMessage(m_hWnd, WM_SOUNDMSG, NULL, 0);),定时器其实也是在通知主线程