WindProc为我做了什么?

时间:2012-07-17 12:56:06

标签: mfc postmessage

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我相信你的应用程序是多线程的,其中一个线程是接收数据,并且与GUI线程不同。您应该仅使用PostMessage来自此对话框的其他主题,而不是SendMessage或直接调用。

如果您收到太多邮件,则应缓冲它们 - 通过计数(比如5000)或一些超时。您可以将邮件保留在vectorlist或您喜欢的任何其他收藏中。稍后,在发送时,将此集合的地址作为WPARAM(或LPARAM)发布到对话框中。 Dialog将在一个组中获得它,并将处理它。这种方法可能不正确,因为我不了解您的应用程序的其他设计信息。

您需要采用反复试验的方法,看看您获得实际性能和稳定性的好处。