申し訳ありませんが、最初に簡単な紹介をしなければなりません。
というクラスがありMJPEGStreamer
ます。と を使用NSOutputStream
して、 NSInputStream
MJPEG データをストリーミングします。これらのクラスを最大 16 個同時に実行します。
最初は、メインクラスでこれを行っていました:
MJPEGStreamer *client = ...;
[client start];
そしてでMJPEGStreamer.m
:
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
しかし、これによりパフォーマンスが非常に低下し、あらゆる種類のエラーが発生しました。これらすべての s をメイン スレッドで実行していると想定したNSStream
ため、この呼び出しを変更しました。
[client start]
これに:
[NSThread detachNewThreadSelector:@selector(start) toTarget:client withObject:nil];
少しデバッグした後、これらのスレッドを作成しているが、適切に停止していないことがわかりました。それはsを閉じNSStream
ますが、スレッドはまだそこにありました.
次に、これを行うための最良の方法は何だろうと考え始めました。
sを閉じるときにスレッドを確実に強制終了するだけで、そのままにしておく必要があり
NSStream
ますか?(スレッドを強制終了するにはどうすればよいですか?)MJPEGStreamer
すべてのクラスが実行される新しいスレッドを 1 つ作成する必要がありますか?使用する必要があります
NSOperationQueue
か?