c++ - pthread_create创建的子线程如何调用主线程?

标签 c++ multithreading pthreads cocos2d-x pthread-join

我使用 pthread_create 为请求的 http 创建了一个子线程,在我得到数据后我想调用主线程来更新 UI。

pthread_detach();
pthread_exit();
pthread_join();

这三个函数可以用来做什么?为什么?

有没有热心人解决我的困惑?非常感谢!

最佳答案

诚实的回答不是以上任何一种。没有办法从子线程调用主线程,但这并不意味着你不能做你想做的事。

子线程与父线程共享相同的内存空间。您需要做的是为子线程创建一种方式来通知父线程它要向用户 (UI) 发送消息。这可以通过多种不同的方式完成,但一个简单的方法是提供一个函数,该函数仅接收您要发送的消息并将其放入队列。

主线程只需要偶尔检查队列中是否有任何消息,并在看到有消息时将其拉出并放到 UI 上。

您当然需要确保从该队列中压入/弹出是通过互斥锁控制的,但是由于我们正在谈论向用户发送的消息,所以您不应该经常这样做并且应该这样做不会导致任何真正的性能问题。

正如我所提到的,这只是您如何做到这一点的一种想法。虽然有很多方法,但基本思想是线程需要一种相互通信的方法。

关于c++ - pthread_create创建的子线程如何调用主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23957301/

相关文章:

c++ - 派生类中需要构造函数参数的成员对象如何初始化?

c++ - 我可以在类定义的头文件中声明一个字符串吗?

c++ - 模拟线程局部变量

java - 多线程:我们如何使用 Java 进行时间切片?

c - Eclipse Juno - GCC 编译器 pthread

c++ - 一个线程修改成员变量,另一个线程读取

php - 带有 pthreads 的 PHP 中的 Worker 和 Pool

c++ - 提高可读性和可维护性 : omit < > for many variable declaration possible?

java - 如何在 junit 中使用未捕获的异常处理程序进行多线程测试?

Java 并发递增值