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
ありがとう、何が必要なのか私はあなたのために、ロックについて私はそれを今理解する。 –