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];
}
스트리밍과 관련이없는 코드를 게시했습니다. BTW 귀하의 threadLock은 아무런 효과가 없습니다. 왜냐하면 각 스레드에 대해 새 스레드를 생성하기 때문입니다. 그리고 더 - 그것은 새어 나오고 있습니다, 왜냐하면 당신은 그것을 풀어주지 않기 때문입니다. – Max
감사합니다. 그래서 필요한 것은 무엇입니까? 나는 당신을 위해 게시합니다. 자물쇠에 대해 지금 이해하고 있습니다. –