3

申し訳ありませんが、最初に簡単な紹介をしなければなりません。

というクラスがありMJPEGStreamerます。と を使用NSOutputStreamして、 NSInputStreamMJPEG データをストリーミングします。これらのクラスを最大 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か?

4

0 に答える 0