繁体   English   中英

pthreads:在主线程上执行 function

[英]pthreads: perform function on main thread

我正在寻找可可的类似物

-[NSObject performSelectorOnMainThread: withObject: waitUntilDone:]

方法。

所以基本上我有一个 function 在一个单独的线程上做一些工作,但它必须执行一些需要在主线程上执行的同步调用。

在 cocoa 中,消息被添加到运行循环中,作为其迭代的一部分被清除。

模拟这个:

  • 你会想要一个运行循环
  • 一个抽象的消息系统
  • 和引用计数机制(在大多数情况下)
  • 一种将这些消息添加到运行循环以进行计划执行的方法

计时器将是一个不错的补充

要专门使用 pthread 接口完成类似的事情,首先要阅读条件pthread_cond_t

我知道您要完成的工作没有具有 1-1 关系的 pthread 接口。 条件也可以在没有运行循环的情况下运行,因此如果您不重用运行循环实现,您可能需要将其带到桌面上。 如果您使用运行循环,那么您只需要一个锁即可将消息添加到具有运行循环的线程。

pthreads 是一个非常低级的抽象,因此使用原始 pthreads 没有简单的方法来做到这一点。 通常,您需要写入文件描述符以唤醒主线程上的事件循环,然后将指针传递给您要运行的 function。 您甚至可以将指针值写入pipe() ,然后让主线程执行它们。

要同步等待,您可以简单地使用互斥锁和条件变量,以及这些执行请求对象上的完成标志。 让子线程等待 mutex/condvar/completion 标志,然后在主线程中(在 mutex 下)设置标志并向 cvar 发出信号。 请求结构的清理将在孩子中完成。

更具体地说,如果您能提及您在主线程上运行的事件循环,将会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM