连续运行多个NSTasks

时间:2011-05-14 21:34:31

标签: objective-c cocoa macos nstask sox

我需要使用NSTask按顺序运行多个命令,并且想知道什么是判断任务是否已完成的好方法所以我可以继续执行下一个命令。我正在使用“sox”(我在应用程序包中包含)使用输入音频文件创建临时音频文件,然后需要将这些临时音频文件合并到一个文件中。流程(不是实际命令)的示例:

  

1)songA> TEMPA

     

2)songB> tempB

     

3)结合tempA tempB> songC

我正在使用以下代码来完成第一个命令:

    NSArray *arguments;
    arguments = [NSArray arrayWithObjects: @"songA", @"-f", @"-S", @"-G", @"-V", @"-b", @"24", @"-r", @"384k", @"tempA", nil];

        NSString *path=[[NSBundle mainBundle] pathForResource:@"sox" ofType:nil];

        NSTask *task;
        task = [[NSTask alloc] init];

        [task setStandardInput:[NSPipe pipe]]; 

        [task setLaunchPath:path];

        [task setArguments: arguments1];

        NSPipe *pipe;
        pipe = [NSPipe pipe];
        [task setStandardOutput: pipe];

        NSFileHandle *file;
        file = [pipe fileHandleForReading];

        [task launch];

        NSData *data;
        data = [file readDataToEndOfFile];

        NSString *string;
        string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

        NSLog (@"stuff  :\n%@", string);

        [string release];
        [task release];

支持我需要在完成后再执行两个NSTask进程(使用前面进程的输出),检测一个进程已完成的最佳方法是什么,以便我可以继续进行下一个进程

感谢。

1 个答案:

答案 0 :(得分:2)

也许不完全明白,但

[task waitUntilExit];

不做这个工作?