【发布时间】:2020-04-09 15:11:50
【问题描述】:
我读到每条消息都有自己使用 lparam 和 wparam 的方式。我找不到任何关于何时传递指针的约定,谁负责内存处理。调用者应该跟踪还是消息处理程序应该处理它?我感觉到在消息传递模型中调用者很难管理内存。因为它不知道消息处理程序何时不再需要该资源。另一方面,这在 C++ 编程中被称为不好的做法。你能帮我解决这个问题吗?
【问题讨论】:
-
视情况而定。如果消息是异步传递的,那么调用者必须承担责任。否则,就必须做出选择。没有一种尺寸适合所有解决方案。您需要先定义用途,然后再做出决定。
-
如果您正在尝试解决特定问题,请告诉我们这是什么问题。如果您只是好奇,那么What do the letters W and L stand for in WPARAM and LPARAM? 可能适合您。
-
我正在考虑我的应用程序的设计。我想选择正确的方式来实现消息传递。
-
这是你的应用程序。你可以制定规则。如果您想转移资源的所有权/责任,那么没有什么能阻止您。
-
如果您需要指针,那么 lParam 通常是一个,因为它曾经是“长”类型。当被调用者必须写入 lParam(由调用者提供)和 WM_NOTIFY 时,您可以使用 WM_GETTEXT 或 WM_GETMINMAXINFO 作为示例,当被调用者从调用者读取(并且不释放)时。通常,会针对具体情况添加详细信息,例如:WM_COPYDATA。这是用于 SendMessage 调用的。对于 PostMessage 调用,这是另一个故事。一些 APIS 使用包装器方法以不透明的方式处理所有这些:docs.microsoft.com/en-us/windows/win32/wintouch/… 并警告您。
标签: pointers winapi memory-management message-queue