我刚在我的代码里发现了个大bug我在a.exe中设置了全局钩子
在dll的回调函数GetMsgProc里,我在调用CallNextHookEx之前
调用SendMessage向a.exe进程中的一个窗口发送消息后来我分析,GetMsgProc里调用SendMessage时,SendMessage在窗口过程响应之前不会返回,而因为设置了钩子,在过程响应前系统又会调用GetMsgProc……死锁出现了
所以,调用时,应该先检查调用是否来自a.exe自身,再决定是否调用SendMessage.但是之前我的程序并没有陷入死循环,唯一的异常情况是a.exe的消息队列中塞满了来自自身的消息,其他进程发来的消息在队列中的比例很小
照上面的分析,消息应该无法到达窗口不是吗?而且为什么没有出现死循环呢?哪位高手对系统实现机制比较了解的,给解释一下可否?