程序中main thread是MFC的主界面thread,开始先启动一个处理数据的子thread,处理完毕子thread自动销毁。可是在子thread的处理过程中,用户如果操作界面,会激发main thread的某个消息函数,在函数中必须对数据进行重新更新。因此main thread需要等待子thread终结。可是当在消息处理函数中等待子线程的时候,main thread居然会死掉!! 不知道为什么,目前根据现象是因为CPU被切换到主线程后,无法再回到子thread中去,因此造成了死锁!!可是为什么会这样呢?主线程优先级比子线程高的原因么???
假死的原因能否解释一下呢?
界面假死是因为界面线程被阻塞无法在处理消息(重画,响应按键等)
于是整体就会假死。关于这点,不知道大家还有什么高见没有?? 多谢先
因为main thread还要负责当前窗口的消息loop,如果被你恶意停在那里,就不能完成重绘,等多个消息的处理你只要在一个辅助线程里做这样伤心病狂的事. :)
或在线程中Sleep让出一下CPU,这样主线程就可以得到执行的机会
main thread:每当某消息函数会激发child thread的时候,用一个变量作为缓冲,存储child 需要处理的数据区的指针。如果消息函数非常快的被重复激发,比如重复按key,如果这时child thread正在运行中,则设置另外的变量通知childthread 终止当前的处理,缓冲区只存储最新的数据存储的pointer。也就是最后一个pointer,并对pointer的访问通过临界区来控制。child thread:平时使用pointer来使用数据区的数据完成界面上某个控件的描绘工作,正常的画完的话就死掉。如果main thread还在不停的更新数据区的指针,并且收到了被打断的通知,那就先删掉所有旧的画好的东西,使用新的数据重新画。