POSIXスレッドを作成すると、システムはNSWillBecomeMultiThreadedNotificationを送信しますか?
-
05-07-2019 - |
質問
試しましたが、この通知は来ないと思います。それは通常のケースですか?
解決
いいえ、この通知は NSThread
によって送信されます。通常のpthreadを使用している場合、送信されません。
他のヒント
Cocoaフレームワークの保護 マルチスレッドアプリケーション、Cocoa フレームワークはロックおよびその他の形式を使用します を確保するための内部同期の 彼らは正しく動作します。防ぐために これらのロックによりパフォーマンスが低下する ただし、シングルスレッドの場合は、 Cocoaは、 アプリケーションは最初の新しいを生成します NSThreadクラスを使用したスレッド。もし POSIXのみを使用してスレッドを生成する スレッドルーチン、Cocoaは 必要な通知を受け取る あなたのアプリケーションが今であることを知っています マルチスレッド。それが起こると、 ココアを含む操作 フレームワークは不安定化またはクラッシュする可能性があります アプリケーション。
Cocoaに意図することを知らせる 複数のスレッドを使用する必要があるすべて doは、を使用して単一のスレッドを生成します NSThreadクラスとそのスレッドにしましょう すぐに終了します。あなたのスレッドエントリー ポイントは何もする必要はありません。ただ を使用してスレッドを生成する行為 NSThreadは、 Cocoaフレームワークに必要なロック 配置されています。
Cocoaが考えるかどうかわからない場合 アプリケーションがマルチスレッドまたは ではなく、isMultiThreadedを使用できます チェックするNSThreadのメソッド。
NSWillBecomeMultiThreadedNotification
が Foundation
に追加されてから、「時間が変更された」ことにも注意する必要があります。マルチスレッドプログラミングは、現在でははるかに一般的です。現在、この通知がアプリに投稿されることは決してないという可能性さえあります。最近のアプリは、おそらくコードの一部が実行される前に、人生のごく初期にマルチスレッドになります。また、ドキュメントから:
Cocoaライブラリを開発している場合、 のオブザーバーとして登録できます その
NSWillBecomeMultiThreadedNotification
あなたが通知されたい場合 アプリケーションはマルチスレッドになります。君は これを受け取ることに頼るべきではない ただし、通知 ライブラリコードの前にディスパッチされます これまでに呼び出されました。
NSWillBecomeMultiThreadedNotification
に依存する代わりに、 [NSThread isMultiThreaded]
を使用します。