我想使用 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)
两个独立的接收线程将并行运行两个独立的消息循环。它们不会互相连载。
如果他们只是读取您的排队数据,那么只要发送线程同时不修改数据,那就可以正常工作。否则,您将必须为数据提供自己的序列化,例如使用关键部分或互斥体。
另外,请记住
PostThreadMessage()
是 异步,因此一旦消息排队,它就会返回到调用线程,因此您需要确保 generic_data
在内存中保持活动状态,直到两者都接收到线程已完成处理您排队的消息。