我想PostThreadMessage()
使用MSG
结构体与 Win32 API 共享从一个线程到另外两个线程的数据结构。我只是想知道排队线程消息的使用是否是序列化的?
我尝试:
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
,因此需要确保该指针generic_data
在内存中保持活动状态,直到两个接收线程都完成对排队消息的处理,否则您将面临使指针无效的风险。