Le système enverra-t-il une notification NSWillBecomeMultiThreadedNotification lorsque je crée des threads POSIX?

StackOverflow https://stackoverflow.com/questions/1608230

  •  05-07-2019
  •  | 
  •  

Question

Je l'ai essayé, mais je pense que cette notification ne va pas arriver. Est-ce le cas normal?

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top