Windows 上通过 PostThreadMessage() 的 WPARAM 类型的共享数据结构是否被序列化?

问题描述 投票:0回答:1

我想使用 Win32 API

PostThreadMessage()
使用
MSG
结构从一个线程向其他两个线程共享数据结构。我只是想知道使用排队线程消息是否被序列化?

我尝试:

PostThreadMessage(thReceiver_A_Id, (int)ct + 100, (WPARAM)&generic_data, NULL);
PostThreadMessage(thReceiver_B_Id, (int)ct + 100, (WPARAM)&generic_data, NULL);

并期望在接收端进行串行访问:

MSG msg;
GetMessage(&msg, NULL, NULL, 0)
winapi
1个回答
0
投票

两个独立的接收线程将并行运行两个独立的消息循环。它们不会互相连载。

如果他们只是读取您的排队数据,那么只要发送线程同时不修改数据,那就可以正常工作。否则,您将必须为数据提供自己的序列化,例如使用关键部分或互斥体。

另外,请记住

PostThreadMessage()
异步,因此一旦消息排队,它就会返回到调用线程,因此您需要确保
generic_data
在内存中保持活动状态,直到两者都接收到线程已完成处理您排队的消息。

© www.soinside.com 2019 - 2024. All rights reserved.