我在一个大型应用程序中遇到了一个问题,这个问题似乎与Pocket PC上的windows messaging有关。我有一个用c++编写的PocketPC应用程序。它只有一个标准消息循环。
while (GetMessage (&msg,NULL,0,0)) {{ TranslateMessage (&msg);DispatchMessage (&msg);}}
我们也有标准的dlgProc,在dlgProc的开关中,我们将调用一个专有的第三方API。此API使用套接字连接与另一个进程通信。我所看到的问题是:每当两条相同的消息快速进入(来自用户点击屏幕两次的速度太快而不应该是)时,看起来就像是创建了递归。Windows开始处理第一条消息,使api进入线程安全状态,然后跳转到处理下一条(相同的ui)消息。因为第二条消息也进行API调用,所以调用失败,因为它被锁定了。由于这个遗留系统的设计,API将被锁定,直到递归返回(这也是由用户触发的;因此它可以在整个工作日内被锁定)。我正在努力弄清楚为什么会发生这种情况,以及我能做些什么。这是因为windows意识到套接字通信将花费时间并抢占它吗?有没有办法在抢占之前强制完成这个API调用?有没有一种方法可以减慢消息处理或将消息重新排队,以确保第一个消息将被执行(捕获它并对其本身执行PostMessage不起作用)。我们不想在第一个调用完成时锁定ui。
任何见解都是非常感谢的!谢谢!!
发布于 2009-10-28 08:09:19
你可以通过一个互斥锁来同步对API的访问,并将传入的作业保存在本地容器中,直到当前作业完成对它的处理。
https://stackoverflow.com/questions/1630837
复制相似问题