2
私は現在のスレッドを停止するためにdispatch_semaphore_waitを使用していますが、すべてのスレッドを停止しているようです。dispatch_semaphore_waitはiPhone APP内のすべてのスレッドを停止します
コード:
SampleReader *reader = [[SampleReader alloc] initWithHostname:hostname andFilePath:filepath];
reader.endHandler = endHandler;
[reader start];
dispatch_semaphore_wait(reader->mSem, DISPATCH_TIME_FOREVER);
マイstartメソッドのようなものがあります:私はセマフォ
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{
switch (eventCode)
Case NSStreamEventErrorOccurred:
dispatch_semaphore_signal(mSem);
break;
case NSStreamEventEndEncountered:
dispatch_semaphore_signal(mSem);
break;
}
を知らせる前記デリゲートメソッドのいずれかでコールバックを取得mFileStream = [[NSOutputStream outputStreamToFileAtPath:[fileurl path] append:FALSE] retain];
[mFileStream open];
mNetworkStream = (NSInputStream *)CFReadStreamCreateWithFTPURL(NULL, (CFURLRef)ftpurl);
mNetworkStream.delegate = self;
[mNetworkStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[mNetworkStream open];
を
しかし、セマフォーで待機を送信すると、デリゲートメソッドは呼び出されません。 その、私はすべてのヘルプは大歓迎されます
//dispatch_semaphore_signal(mSem);
行をコメントアウトするときにのみ呼び出されます。