2012-12-19 21 views
6

NSPipeチャネルを使用する2つのスレッド間の通信を実現する必要がありますが、この方法を指定することによって端末コマンドを呼び出す必要はありません。NSPipeを使用するプロセス間の通信NSTask

[task setCurrentDirectoryPath:@"....."]; 
[task setArguments:]; 

私は、例えば、C#でこのようなことが簡単にNamedPipeClientStreamで行うことができます

 NSData *stdOutData = [reader availableData]; 
NSString * message = [NSString stringWithUTF8String:[stdOutData bytes]]; //My Hello World 

このメッセージを受信するために、いくつかのデータ

NSString * message = @"Hello World"; 
[stdinHandle writeData:[message dataUsingEncoding:NSUTF8StringEncoding]]; 

や他のスレッド上を記述する必要がありますパイプをID列によって登録され NamedPipeServerStreamクラス。 Objective-Cでそれを達成する方法

+0

同じプロセス内に2つのスレッドについて、またはパイプを介して通信する別々のプロセスに関する質問はありますか?パイプを介して通信する別個のプロセスを達成することができますどのようにパイプ –

+0

その? – Andrew

+0

を介して通信する二つのスレッドについて – vadivelu

答えて

3

私が正しくあなたの質問を理解していれば、あなただけのNSPipeを作成し、読み取りと書き込みのための一端のための一端を使用することができます。例:

// Thread function is called with reading end as argument: 
- (void) threadFunc:(NSFileHandle *)reader 
{ 
    NSData *data = [reader availableData]; 
    NSString *message = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@", message); 
} 

- (void) test 
{ 
    // Create pipe: 
    NSPipe *pipe = [[NSPipe alloc] init]; 
    NSFileHandle *reader = [pipe fileHandleForReading]; 
    NSFileHandle *writer = [pipe fileHandleForWriting]; 

    // Create and start thread: 
    NSThread *myThread = [[NSThread alloc] initWithTarget:self 
               selector:@selector(threadFunc:) 
                object:reader]; 
    [myThread start]; 

    // Write to the writing end of pipe: 
    NSString * message = @"Hello World"; 
    [writer writeData:[message dataUsingEncoding:NSUTF8StringEncoding]]; 

    // This is just for this test program, to avoid that the program exits 
    // before the other thread has finished. 
    [NSThread sleepForTimeInterval:2.0]; 
} 
+0

はあなたに感謝し、それは素晴らしい – Andrew

+0

@Andrewに動作します:!あなたが歓迎され、私はそれが助けたことをうれしく思います。 –

+1

ok。よくわかりません。これは2つのアプリがお互いに話すことを可能にするためにどのように機能するのですか?そして、パイプはアプリケーション間で共有する何らかの識別子を設定しますか?また、1つのパイプセットを使用できるアプリの数はいくつですか? –

関連する問題