1
我正在處理流應用程序的一部分。我需要在使用NSinputstream和NSOutputstream的後臺線程上進行流處理。 然後我通過同一個線程上的這個流式傳輸通道發送http命令。 我收到NSStreamEventOpenCompleted和NSStreamEventHasSpaceAvailable,並且還收到服務器端的http請求,但它不會引發EVENT HAS BYTES AVAILABLE。我無法收到答覆......我不知道問題是什麼。這裏是我的代碼一些部分:NSInputStream在後臺線程不會調用NSStreamEventHasBytesAvailable
主題,我使用:
- (void)backgroundThread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLock *threadLock = [[NSLock alloc] init];
while (quitProcess)
{
if (queue.count > 0)
{
[threadLock lock];// Blocks other threads
cmdQueue = [queue copy];
[queue removeAllObjects];
[threadLock unlock];
}
else
{
sleep(1);
}
if (cmdQueue){
for (NSString* cmd in cmdQueue)
{
if ([cmd isEqualToString:@"subscribe"]){
[self openCmdLine];
}else if ([cmd isEqualToString:@"dataConnect"]){
[self dataConnect];
}else if ([cmd isEqualToString:@"openCmdLine"]){
[self openCmdLine];
}else if ([cmd isEqualToString:@"closeCmdLine"]){
[self closeCmdLine];
}else if ([cmd isEqualToString:@"handshake"]){
sleep(5);
[self cmdHandshake];
}else if ([cmd isEqualToString:@"topvol"]){
[self cmdTopVol];
}else{
//subscribe or unsubscribe
}
}
cmdQueue = nil;
}
}
[pool drain];
}
您發佈的代碼與您的流式傳輸無關。順便說一下,你的threadLock完全沒有任何作用,因爲你正在爲每個線程創建一個新線程。甚至更多 - 它泄漏,因爲你不釋放它。 – Max 2011-12-24 11:29:52
謝謝你,所以你需要我發佈給你,關於我現在明白的鎖。 – 2011-12-30 19:10:22