gpt4 book ai didi

ios - 对于 close 和 writeData 方法,NSOutputStream 线程安全吗?

转载 作者:行者123 更新时间:2023-11-28 20:15:47 29 4
gpt4 key购买 nike

我的程序经常在以下行崩溃(访问错误):

int writeSize = [_outputStream write:pCopyOfDataBuff maxLength:sendLength];

pCopyOfDataBuff 是一个

pCopyOfDataBuff = new unsigned char [sendLength];

在崩溃行之前分配并填充堆栈上的数据。上下文是处理此流的特殊线程。

当我在调试器中停止时,使用符号异常断点,我发现 _outputStream 实际上已关闭

[_outputStream close];

在主线程中关闭。现在这可能是同时发生的。

我的问题:在多线程中像这样处理 NSOutputStream 是否安全?我应该将对 NSStream 的所有调用同步到同一个线程吗?

谢谢。我在文档中找不到简单的答案。

最佳答案

最近遇到了同样的问题。我发现主线程上的某个委托(delegate)使用 [myQueue cancelAllOperations] 关闭了操作队列并按如下方式关闭连接:

-(void)closeStream:(NSStream *)stream {
[stream setDelegate:nil];
[stream close];
[stream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}

我的解释是,在用 [self.outputStream write:bytes maxLength:bytesRecieved]; 写入的过程中,输出流被关闭了。

我通过等待 NSOperationQueue 完成来解决它:[myQueue waitUntilAllOperationsAreFinished] .

希望这有助于解决您的问题。

关于ios - 对于 close 和 writeData 方法,NSOutputStream 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18141956/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com