如何在pthread_create创建的子线程中调用主线程?

时间:2014-05-30 14:44:23

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

我使用pthread_create为http请求创建了一个子线程,在我获取数据之后我想调用主线程做一些UI的更新。

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

可以使用的三个功能?为什么?

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

1 个答案:

答案 0 :(得分:2)

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

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

主线程只需偶尔检查该队列中的任何消息,并在看到其中的一个消息时将其拉出来。

你当然需要确保从该队列推送/弹出是通过互斥锁来控制的,但是由于我们正在向用户讨论消息,所以它不应该是你经常做的事情而应该不会造成任何真正的性能问题。

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