0

我有一个正在开发的多对话框 MFC 客户端应用程序。该客户端可以接收到主对话框的大量消息(>10Hz),主对话框通常执行一些小功能,然后将该消息转发到另一个对话框进行处理。
在我的具体情况下,主对话框接收与车辆位置相关的消息,更新该 GUI 上的几个字段,然后通过 PostMessage 将其传递到显示所有车辆信息的窗口。

所以基本上,我的问题是:发布消息或只是调用 dialog.update (这是我创建的函数)有什么区别?

4

2 回答 2

0

我相信您的应用程序是多线程的,其中一个线程正在接收数据,并且与 GUI 线程不同。您应该PostMessage只使用从其他线程到此对话框,而不是SendMessage或直接调用。

如果你收到太多消息,你应该缓冲它们——或者通过计数(比如 5000),或者通过一些超时。您可以将消息保存到vectorlist或您喜欢的任何其他集合中。稍后,在发送时,将此集合的地址作为WPARAM(或LPARAM)发布到对话框。Dialog 会以一堆形式获取它并对其进行处理。这种方法可能不正确,因为我不了解您的应用程序的其他设计观点。

您将需要反复试验的方法,看看您从哪里获得了实际的性能和稳定性优势。

于 2012-07-18T08:16:25.047 回答
0

好吧,既然我们不知道你的 dialog.update() 做了什么,我们怎么知道有什么区别呢?

如果你正在做另一个 PostMessage,我不确定那是什么意思。您的程序必须等待消息循环的另一次迭代来检索您新发布的消息,并且可能会在该消息发布之前收到另一条消息。您可以使用 SendMessage 代替 PostMessage,它将消息直接发送到 WndProc,而无需为另一条消息迭代消息循环。

我在想,如果你是多线程的,那么发送或发布消息会更加线程安全,因为 Windows 应该自动切换上下文。如果你是单线程的,那么它可能不重要。

于 2012-07-17T17:49:44.390 回答