私のアプリは、別のスレッドでネットワーク タスクを実行します。サーバーからデータを取得し、処理して、継続的に結果を表示します。これは、1 つのスレッドにそのようなネットワーク接続が 1 つしかない場合にうまく機能します。ただし、同様のネットワーク タスクで 2 番目のスレッドを実行すると、2 番目のスレッドは正常に動作しますが、最初のスレッドは応答を停止します。ネットワーク プロセスをスケジュールするクラスのコードは次のとおりです。ここで何がうまくいかないのかについて何か考えはありますか?
NSThread * nThread;
- (NSThread *)networkThread {
nThread = nil;
nThread =
[[NSThread alloc] initWithTarget:self
selector:@selector(networkThreadMain:)
object:nil];
[nThread start];
DLog(@"thread: %@, debug description: %@", nThread, nThread.debugDescription);
return nThread;
}
- (void)networkThreadMain:(id)unused {
do {
[[NSRunLoop currentRunLoop] run];
} while (YES);
}
- (void)scheduleInCurrentThread:(id)unused
{
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSRunLoopCommonModes];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSRunLoopCommonModes];
}
-(BOOL) connectWithError:(NSString **) e
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"127.0.0.1", [server port], &readStream, &writeStream);
inputStream = (__bridge NSInputStream *) readStream;
outputStream = (__bridge NSOutputStream *) writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[self performSelector:@selector(scheduleInCurrentThread:)
onThread:[self networkThread]
withObject:nil
waitUntilDone:YES];
[inputStream open];
[outputStream open];
}