- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
昨天我read somewhere that NSTask isn't thread safe这让我很困扰,因为我在 NSThread 中运行 NSTask,并且到目前为止还没有遇到任何线程问题。
我的代码是这样组织的
A: main thread -> B: worker thread -> C: worker task
C: The worker task is a commandline program.
B: The worker thread can start/stop the worker task and send it commands.
A: The main thread can send commands to the worker thread.
如果 NSTask 应该仅在主线程中使用,那么我正在考虑将 NSTask 启动/停止代码移动到主线程,只是为了防止可能的线程问题。
NSTask可以在主线程之外使用吗?
如果不是,那么 NSTask 的线程问题可能是什么?
最佳答案
那页不是这么说的。它表示您将在启动进程的同一个线程上收到进程终止通知,这表明 NSTask 知道线程并尝试做正确的事情。
该页面的编辑之一遇到的问题是他们从线程启动进程,然后让线程终止。这导致了崩溃,因为框架不再能够将进程终止通知传递给正确的线程。
Thread Safety Summary (书签)说了类似的话,将 NSTask 列在它所说的类列表中:
In most cases, you can use these classes from any thread as long as you use them from only one thread at a time. Check the class documentation for additional details.
NSTask 文档没有提及有关线程的任何其他内容,因此听起来 NSTask 是“大多数情况”之一:您可以使用创建任务的线程中的任务。不要在另一个线程上使用相同的任务,并且(如上所述)确保线程的持续时间至少与任务进程一样长。
但是,我要指出的是,在大多数情况下,不需要在单独的线程上运行任务。单独的进程往往会像进程中的其他线程一样在其他处理器上运行,并且运行循环可以很好地复用许多小事件并保持 UI 响应。您可以使用NSFileHandle's readInBackgroundAndNotify
method如果您需要读取任务的输出。您也许可以完全删除工作线程。
正如 Eimantas 所建议的,另一种方法是使用 NSOperation:有一个操作,只需启动特定任务并等待该任务退出(可能同步读取其中的输出)。当任务退出时操作完成。
关于cocoa - NSTask 可以在主线程之外安全地使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3029868/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!