【问题标题】:How to call main thread in the child thread created by pthread_create?pthread_create创建的子线程中如何调用主线程?
【发布时间】:2014-05-30 14:44:22
【问题描述】:

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

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

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

有没有热心人能解我的疑惑?非常感谢!

【问题讨论】:

  • @Cdaragorn 提供的答案很好。又一想。如果您使用的是 Cocos2d-x v3,那么您也可以使用 std::thread
  • @GameDeveloper 回调函数是否跑完了,pthread_created线程自动退出?

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 你说的我明白了,我是cocos2dx的新手,你能给我一些示例代码吗?
  • 我不知道 cocos2dx 是什么,抱歉。我做过的所有线程通常都是使用基本线程库或内置的语言工具完成的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多