我如何在另一个线程的runloop中安排一些东西?

时间:2014-10-27 10:23:31

标签: ios multithreading macos nsthread nsrunloop

我正在编写一个通过tcp连接发送/接收数据的应用程序,我想安排读/写在不同线程的运行循环中发生。意思是线程1正在创建连接并在线程2的运行循环上调度它。我无法找到任何方法来访问不同线程的运行循环,所以我写了一段代码,辅助线程将运行它将存储它在全球可访问的位置运行循环。我想知道这是否是正确的方法,或者是否有其他/更好的方法来做同样的事情,如果我这样做的方式将导致访问运行循环不是线程安全和导致的问题如果我试图在多个线程的同一线程的运行循环上安排多个事情,则会出现问题。

如下所示。

[NSRunLoop currentRunLoop] - >我可以从我想要访问的runloop的线程中做到这一点

NSRunLoop * secondthreadrunloop = [secondthread getRunLoop]; - >但是有这样的东西吗?

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,似乎答案是 - 不,你不能在运行在不同线程上的NSRunLoop上安排任何事情。 Apple说NSRunLoop不是线程安全的,这意味着将NSTimer实例附加到它会导致未定义的行为(我已经检查过它,在我的情况下它会随机生成崩溃)。

可以做的是从后台线程本身安排一个重复计时器,让它从一些原子属性中获取你想要它做的工作。