[英]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.