c语言中,创建的子线程如何给主线程发消息?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中,创建的子线程如何给主线程发消息?相关的知识,希望对你有一定的参考价值。

main本身是主线程,使用pthread_create创建一个子线程,现在想让子线程给主线程发消息,应该怎么操作(不是使用共享内存的)?

linux系统
还有一点,主线程和子线程之间的这个消息是异步的
就是说不能使用互斥量让主线程阻塞。

流程就是主线程一旦收到消息就XXXX,但是收不到的时候正常做自己的事情。

参考技术A 自己定义的信号,你要emit newOprMsg(unsigned int msg);
才行

不知道你emit了没~~

子线程的run()里,你好赖也得加个exec()吧,要不无事件循环,制能收到你的signal?追问

这个,你能说得更详细些吗 或者给个具体的例子呢?
谢谢~~~~

参考技术B fork
是用来创建子进程的,
而不是线程(
线程创建需要用到
pthread_create
)
需要根据
fork()
的返回值来判断下面的代码是在父进程(返回pid>0)中还是子进程(返回0)中.
像上面的代码中
if
中的代码被在子进程中执行,
else
中的代码在父进程中执行.
参考技术C 信号可以在线程间实现通讯 信号有处理方法 但信号不保证在主线程中被接收处理
听人说可以屏蔽只允许主线程接收处理,具体是否可行 未知

如何将任务委托给主线程并等待其执行完成?

【中文标题】如何将任务委托给主线程并等待其执行完成?【英文标题】:How to delegate a task to main thread and wait for it's execution to complete? 【发布时间】:2011-10-02 07:28:17 【问题描述】:

我有一个 Borland C++ 项目,我在其中看到一个 synchronize() 方法,工作线程可以使用该方法将任务委托给主线程并等待任务完成。在 C# 中,有一个类似的 Control.Invoke() 方法。在 Visual Studio 中为 GUI 和控制台应用程序使用 C++ 时是否有类似的东西? SendMessage() 出现在我的脑海中,但这是否相当于上述两个?

【问题讨论】:

请注意,这不是关于 C++,而是关于操作系统和系统特定的库。 C++ 没有任何标准化的多任务支持(还...) 【参考方案1】:

SendMessage 适用于 GUI 应用程序,其中主线程有一个消息队列。对于控制台应用程序,没有通用方法。您需要首先决定主线程应如何处理此类请求。如果 Console 应用程序的主线程有消息队列,SendMessage 也可以。您可以考虑其他方式,例如,使用事件,每一次都取决于主应用程序线程的行为及其处理来自其他线程的请求的能力。

【讨论】:

SendMessage 接受 HWND,因此它不适用于(纯)控制台应用程序。您可以为此使用PostThreadMessage,但您必须自己处理等待 - PostThreadMessage 是异步的。 @eran,感谢 Alex 和 eran 的回复。

以上是关于c语言中,创建的子线程如何给主线程发消息?的主要内容,如果未能解决你的问题,请参考以下文章

当前线程为主线程,我想用PostThreadMessage 给当前线程(主线程)发送消息,没有反映这是为啥呀?

android handler传递消息机制

java 子线程如何返回结果给主线程

QT多线程问题:子线程中的变量如何传递给主线程?

qt子线程如何传输数据给主线程

如何将 ManagedObjectID 传递给主线程