2012-04-17 50 views
1

我不太确定这是否是正确的方法(im爱好者)。我想将消息发布到循环GetMessage()的工作线程,并根据消息做些什么。我知道我必须使用posthreadmessage()与该工作线程的句柄。使用来自不同线程的posthreadmessage()

这里是我的问题:

我可以使用

PostThreadMessage(idWorkerThread, WM_COMMAND, (WPARAM)0, (LPARAM)0)) 

从多个不同的线程?我知道这可能会导致消息从不同线程同时写入工作线程消息队列。这是一个问题还是很好?基本上我想要一个N-> 1线程间通信。

+0

只需添加Pete发布的内容,如果在Windows或任何其他多任务处理器上的OS调用都是线程安全的,则无需担心。根据定义,它们是。如果他们不是操作系统会很快炸毁,你永远不会看到你的桌面。唯一的例外是子系统中的晦涩之处,比如设置进程调试钩子。像PostThreadMessage这样的主流内核调用是100%线程安全的。 – 2012-04-17 11:55:28

回答

1

PostThreadMessage是线程安全的,所以你会没事的。它是一个很好的做法。另一种选择是使线程等待事件或条件变量,并具有通过适当的同步将事件推送到队列的功能。

+0

非常感谢这个信息:) – user912877 2012-04-17 08:21:03

相关问题