C++ 使用来自不同线程的posthreadmessage()

C++ 使用来自不同线程的posthreadmessage(),c++,windows,multithreading,C++,Windows,Multithreading,我不确定这是否是正确的方法(我是一个爱好者)。我想将消息发布到一个工作线程,该线程循环GetMessage(),并根据消息执行某些操作。我知道我必须将posthreadmessage()与该工作线程的句柄一起使用 我的问题是: 我能用吗 PostThreadMessage(idWorkerThread, WM_COMMAND, (WPARAM)0, (LPARAM)0)) 来自多个不同的线程?我知道这可能会导致从不同线程同时将消息写入工作线程消息队列。这是个问题还是没问题?本质上,我需要一个N

我不确定这是否是正确的方法(我是一个爱好者)。我想将消息发布到一个工作线程,该线程循环GetMessage(),并根据消息执行某些操作。我知道我必须将posthreadmessage()与该工作线程的句柄一起使用

我的问题是:

我能用吗

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

来自多个不同的线程?我知道这可能会导致从不同线程同时将消息写入工作线程消息队列。这是个问题还是没问题?本质上,我需要一个N->1线程间通信。

PostThreadMessage是线程安全的,所以您会没事的。这是一个很好的方法。另一个选项是让线程等待事件或条件变量,并具有将事件推送到具有适当同步的队列的函数。

PostThreadMessage是线程安全的,因此您不会有问题。这是一个很好的方法。另一个选项是让线程等待事件或条件变量,并具有将事件推送到具有适当同步的队列的功能。

只需添加Pete发布的内容,就不必担心Windows或任何其他多任务机上的操作系统调用是否是线程安全的。根据定义,它们是。如果不是这样,操作系统会爆炸得如此之快,以至于你永远看不到你的桌面。唯一的例外是子系统(如设置进程调试挂钩)中的模糊异常。像PostThreadMessage这样的主流内核调用是100%线程安全的。除了Pete发布的内容之外,没有必要担心Windows或任何其他多任务机上的操作系统调用是否是线程安全的。根据定义,它们是。如果不是这样,操作系统会爆炸得如此之快,以至于你永远看不到你的桌面。唯一的例外是子系统(如设置进程调试挂钩)中的模糊异常。像PostThreadMessage这样的主流内核调用是100%线程安全的。