Thread1
{
OnMessage()
{
s.Lock();
...........
Fun();
.............
s.UnLock();
}
}Thread2
{
PostMessage();
}
Thread2 向Thread1发送消息,Thread1执行 Fun(),如果Fun()未执行完,Thread2 又向Thread1发送消息,造成OnMessage()的重入,这样Thread1肯定回死锁。这种问题如何解决?
{
OnMessage()
{
s.Lock();
...........
Fun();
.............
s.UnLock();
}
}Thread2
{
PostMessage();
}
Thread2 向Thread1发送消息,Thread1执行 Fun(),如果Fun()未执行完,Thread2 又向Thread1发送消息,造成OnMessage()的重入,这样Thread1肯定回死锁。这种问题如何解决?
解决方案 »
- ocx中引用了另外一个ocx,如何打cab包,跪求
- win7中exe文件的publisher怎么样才可以修改
- Visual Assist 的 find reference 不全面
- c 中的IO流
- 谁提供点关于BHO的资料啊或者教程啊
- 动态生成的控件默认字体是"System",大小为10,怎样在工程中设定默认字体,使得该工程的所有控件默认字体是"宋体"?
- root分析之一:HOOK磁盘驱动
- 讨论关于开发界面的问题
- 如何播放网络上传来的avi流
- 应如何调用MSFlexGrid控件的AddItem
- ADO的_RecordsetPrt::AddNew()不成功求解。急!急!急!急!急!急!
- ★★ODBC中 在Open时执行delete会出错吗 ? ? ★★
因为第二次s.lock()阻塞,直到第一次s.unlock()执行完为止。
A要得到a,b资源,现在得到了a
B也要得到a,b资源,现在得到了b
这样A,B就形成了死锁。另外,由于消息的处理是串行的,只有一个消息处理完以后
才会处理另一个消息。
所以从这点看,你的程序肯定是不会死锁的。
OnTime()
{
MessageBox();
}
可以弹出无数个对话框,说明这个定时器消息似乎并不是串行的。
OnTime()
{
MessageBox();
}
可以弹出无数个对话框,说明这个消息的处理不是串行的。
发送消息的周期,就不会阻塞了。
PostMessage发到消息队列。
windows中使用On开头的函数一般都是直接处理。
其实这方面的你可以看一看<<深入浅出MFC>>