0

私はObjectiveCの新参者です。デフォルトのキューにdispatch_asyncを使用して、GCDを介して新しいスレッドを作成するオブジェクトがあります。このスレッドを閉じる必要があるかどうかを確認するために、スレッドでtimeout=1秒のdispatch_semaphore_waitを使用します。

「close」メソッドを呼び出すと、dispatch_semaphore_signalが送信され、スレッドが閉じます。ただし、「close」メソッドが終了した後、スレッドが存続する場合があります。スレッドが終了するまで「close」メソッドで待機するにはどうすればよいですか?

どうも。

4

1 に答える 1

3

そのような質問に対する正規の答え: 何をしようとしていますか?

これをお願いするのは、まず、GCD リクエストをサポートするスレッドが存在すること、およびそれがいつ終了するかを知る必要も気にする必要もないためです。これは完全に GCD の管理次第です。

次に、明示的なタイムアウト (「FOREVER」以外) を使用するコードを常に疑う必要があります。「なぜ 1 秒なのか? 待っているイベントにこれよりも多くの時間がかかったり、短くなったりしたらどうなるでしょうか?」と自問する理由がある場合は、次に、ポーリングにつながるような考え方に取り組んでいます。ポーリングは、特定の種類のデバイスドライバーを作成することを除いて、ほとんどすべての悪い悪い (悪、間違った) 設計です!

はるかに合理的なアプローチは、操作の最後に完了コールバックを使用して操作が完了したことを通知し、プログラミングに完全に非同期のアプローチを採用し、その過程で GCD の基本的な設計原則の 1 つに従うことです。

私には聞こえますが、ここでは推測しているだけですが、既存のプログラミングパラダイムまたは考え方を誤って GCD に適用していると思われます。理解できる間違いですが、それでも間違いです。

于 2012-08-25T01:57:27.050 に答える