Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
dispatch_semaphore_wait停止iPhone应用程序中的所有线程_Iphone_Objective C_Asynchronous_Semaphore_Nsstream - Fatal编程技术网

dispatch_semaphore_wait停止iPhone应用程序中的所有线程

dispatch_semaphore_wait停止iPhone应用程序中的所有线程,iphone,objective-c,asynchronous,semaphore,nsstream,Iphone,Objective C,Asynchronous,Semaphore,Nsstream,我正在使用dispatch\u信号量\u wait停止当前线程,但它似乎停止了所有线程 代码: 我的启动方法类似于: mFileStream = [[NSOutputStream outputStreamToFileAtPath:[fileurl path] append:FALSE] retain]; [mFileStream open]; mNetworkStream = (NSInputStream *)CFReadStreamCreateWithFTPURL(NULL, (CFURLR

我正在使用dispatch\u信号量\u wait停止当前线程,但它似乎停止了所有线程

代码:

我的启动方法类似于:

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];
我在其中一个委托方法中获得回调,在该方法中我向信号量发送信号

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{

  switch (eventCode)
  Case NSStreamEventErrorOccurred:
                    dispatch_semaphore_signal(mSem);
        break;
    case NSStreamEventEndEncountered:
        dispatch_semaphore_signal(mSem);
        break;
}

但是,当我发送等待信号量时,不会调用委托方法。 只有当我注释掉这行时,它才会被调用

 //dispatch_semaphore_signal(mSem);

任何帮助都将不胜感激

如果您从主线程调用
[reader start]
,那么您正在创建死锁。您的流正在与此处的主线程关联:

[mNetworkStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
这意味着,要使其工作,主运行循环必须是旋转的。如果
dispatch\u semaphore\u wait
在主线程上,则停止运行循环并阻止流处理其事件

我不知道注释掉
dispatch\u semaphore\u signal
除了使
等待
永不返回之外还能做什么

[mNetworkStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];