Le système enverra-t-il une notification NSWillBecomeMultiThreadedNotification lorsque je crée des threads POSIX?
-
05-07-2019 - |
Question
Je l'ai essayé, mais je pense que cette notification ne va pas arriver. Est-ce le cas normal?
La solution
Non, cette notification est envoyée par NSThread
. Si vous utilisez des pthreads ordinaires, cela ne sera pas envoyé.
Autres conseils
De la documentation :
Protéger les cadres Cocoa pour applications multithread, Cocoa les cadres utilisent des serrures et d'autres formes de la synchronisation interne pour assurer ils se comportent correctement. Pour prévenir ces serrures de dégrader les performances dans le cas des threads simples, cependant, Le cacao ne les crée pas avant la application engendre sa première nouvelle thread en utilisant la classe NSThread. Si vous créez des threads en utilisant uniquement POSIX routines de thread, Cocoa ne recevoir les notifications nécessaires sachez que votre application est maintenant multithread. Quand cela arrive, opérations impliquant le cacao les cadres peuvent se déstabiliser ou s'écraser votre application.
Faire savoir à Cocoa que vous avez l’intention de utilisez plusieurs fils, tout ce que vous avez à faire faire est de générer un seul fil en utilisant le NSThread classe et laisser ce fil sortir immédiatement. Votre entrée de fil le point n'a besoin de rien faire. Seulement le acte de génération d'un fil en utilisant NSThread est suffisant pour assurer que le serrures nécessaires par les cadres Cocoa sont mis en place.
Si vous n'êtes pas sûr si Cocoa pense votre application est multithread ou non, vous pouvez utiliser le isMultiThreaded méthode de NSThread à vérifier.
Il convient également de noter que les "temps ont changé" depuis que NSWillBecomeMultiThreadedNotification
a été ajouté à Foundation
. La programmation multithread est maintenant beaucoup, beaucoup plus commune. Il est maintenant tout à fait envisageable, même probable, que cette notification ne soit jamais publiée dans une application. Les applications modernes deviennent multi-thread très tôt dans leur vie, peut-être avant même qu'une partie de votre code ne soit exécutée. Également dans la documentation:
Si vous développez une bibliothèque Cocoa, vous pouvez vous inscrire en tant qu'observateur pour le
NSWillBecomeMultiThreadedNotification
si vous souhaitez être averti lorsque le l'application devient multithread. Vous ne devrait pas compter sur recevoir cette notification, cependant, comme il pourrait être expédié avant que votre code de bibliothèque soit jamais appelé.
Je voudrais utiliser [NSThread isMultiThreaded]
au lieu de compter sur NSWillBecomeMultiThreadedNotification
.