Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Xcode 从具有多线程打印输出的NSTask获取输出_Xcode_Multithreading_Swift_Nstask_Nsfilehandle - Fatal编程技术网

Xcode 从具有多线程打印输出的NSTask获取输出

Xcode 从具有多线程打印输出的NSTask获取输出,xcode,multithreading,swift,nstask,nsfilehandle,Xcode,Multithreading,Swift,Nstask,Nsfilehandle,我有一个Xcode应用程序(用Swift编写,但这应该是无关的),它启动控制台应用程序(即用C++编写的终端应用程序),并期望从标准输出和错误输出中读取输出。任务从其主线程打印,也从它创建的另一个子线程打印 任务设置如下所示: standardOutputPipe = NSPipe() standardErrorPipe = NSPipe() someTask = NSTask() someTask!.launchPath = transporterPath

我有一个Xcode应用程序(用Swift编写,但这应该是无关的),它启动控制台应用程序(即用C++编写的终端应用程序),并期望从标准输出和错误输出中读取输出。任务从其主线程打印,也从它创建的另一个子线程打印

任务设置如下所示:

    standardOutputPipe = NSPipe()
    standardErrorPipe = NSPipe()

    someTask = NSTask()
    someTask!.launchPath = transporterPath
    someTask!.standardOutput = standardOutputPipe!
    someTask!.standardError = standardErrorPipe!

    someTask!.standardOutput!.fileHandleForReading.readInBackgroundAndNotify()
    someTask!.standardError!.fileHandleForReading.readInBackgroundAndNotify()

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "standardDataReceived:",
        name: NSFileHandleReadCompletionNotification, object: someTask!.standardOutput!.fileHandleForReading)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "errorDataReceived:",
        name: NSFileHandleReadCompletionNotification, object: someTask!.standardError!.fileHandleForReading)
问题是我的应用程序只接收来自主线程的输出(通过任务的FileHandleForReading on Standard和Error输出);通过子线程从任务打印的任何内容都不会被捕获。如果我从终端运行任务,所有内容都会毫无问题地打印到屏幕上


除了主任务的输出外,如何捕获任务子线程的输出?或者,这个问题是否可能与任务的线程无关,而是与FileReader通知发生的意外事件有关?谢谢你的帮助

您可能需要显示辅助线程的主函数。您是否正在运行它的runloop?尝试添加一些日志以确保它不会立即退出?@nielsbot NSTask肯定不会立即退出,因为我从它的主线程获得输出,直到手动终止任务。我如何告诉次要线程的主函数?NSTask是否从其调用函数(即主程序)混淆其子线程?