我在似乎与 Pocket PC 上的 Windows 消息传递有关的大型应用程序中遇到问题。我拥有的是一个用 c++ 编写的 PocketPC 应用程序。它只有一个标准的消息循环。
while (GetMessage (&msg, NULL, 0, 0)) { { TranslateMessage (&msg); 调度消息 (&msg); } }
我们也有标准的 dlgProc。在 dlgProc 的切换中,我们将调用专有的 3rd 方 API。此 API 使用套接字连接与另一个进程进行通信。我看到的问题是这样的:每当两个相同的消息快速进入(用户点击屏幕两次太快,不应该)时,似乎创建了递归。Windows 开始处理第一条消息,使 api 进入线程安全状态,然后跳转到处理下一条(相同的 ui)消息。好吧,因为第二条消息也进行了 API 调用,所以调用失败了,因为它被锁定了。由于这个遗留系统的设计,API 将被锁定,直到递归返回(这也是由用户触发的;因此它可以被锁定整个工作日)。我正在努力弄清楚为什么会发生这种情况以及我能做些什么。这是因为 Windows 识别套接字通信需要时间并抢占它吗?有没有办法可以强制此 API 调用在抢占之前完成?有没有办法可以减慢消息处理或重新排队消息以确保第一个消息将执行(捕获它并将 PostMessage 返回到自身没有工作)。我们不想在第一次调用完成时锁定 ui。这是因为 Windows 识别套接字通信需要时间并抢占它吗?有没有办法可以强制此 API 调用在抢占之前完成?有没有办法可以减慢消息处理或重新排队消息以确保第一个消息将执行(捕获它并将 PostMessage 返回到自身没有工作)。我们不想在第一次调用完成时锁定 ui。这是因为 Windows 识别套接字通信需要时间并抢占它吗?有没有办法可以强制此 API 调用在抢占之前完成?有没有办法可以减慢消息处理或重新排队消息以确保第一个消息将执行(捕获它并将 PostMessage 返回到自身没有工作)。我们不想在第一次调用完成时锁定 ui。
非常感谢任何见解!谢谢!!