Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在另一个线程的runloop中调度某些内容?_Ios_Multithreading_Macos_Nsthread_Nsrunloop - Fatal编程技术网

Ios 如何在另一个线程的runloop中调度某些内容?

Ios 如何在另一个线程的runloop中调度某些内容?,ios,multithreading,macos,nsthread,nsrunloop,Ios,Multithreading,Macos,Nsthread,Nsrunloop,我正在编写一个应用程序,该应用程序将通过tcp连接发送/接收数据,我希望将读/写操作安排在另一个线程的运行循环中进行。这意味着线程1正在创建连接并在线程2的运行循环上调度它。我找不到访问其他线程的运行循环的任何方法,因此我编写了一段代码,辅助线程将运行该代码,该代码将其运行循环存储在全局可访问的位置。我想知道这是否是正确的方法,或者是否有其他/更好的方法来做同样的事情,以及我所做的方式是否会导致问题,比如访问运行循环不是线程安全的,以及如果我尝试在多个线程的同一线程的运行循环上调度多个事情,是否

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

类似下面的内容

[NSRunLoop currentRunLoop]-->我可以从要访问其runloop的线程执行此操作


NSRunLoop*secondthreadrunloop=[secondthread getRunLoop];-->但是有类似的问题吗?

我最近遇到了同样的问题,答案似乎是-没有,您不能在不同线程上运行的nsrunlop上安排任何内容。苹果表示nsrunlop不是线程安全的,这意味着将NSTimer实例附加到它会导致未定义的行为(我已经检查过了,在我的例子中,它会随机产生崩溃)


不过,可以做的是从后台线程本身安排一个重复计时器,让它从一些原子属性中提取您希望它完成的工作。

如果您需要使用TCP构建应用程序,我建议您使用此库,而不是自己编写所有内容。这将节省大量的工作和精力…除了苹果提供的以外,我不允许使用任何东西。谢谢。看看“Grand Central Dispatch”(GCD)和函数Dispatch\u sync、Dispatch\u async和Dispatch\u Once,我知道GCD,但实际上我想在我以编程方式创建的另一个线程上调度它。我不想使用任何异步库或类似的东西。我只是想知道是否有任何方法可以访问另一个线程的运行循环,以及它是否是线程安全的。