¿Enviará el sistema una notificación NSWillBecomeMultiThreadedNotification cuando cree subprocesos POSIX?
-
05-07-2019 - |
Pregunta
Lo intenté, pero creo que esta notificación no llega. ¿Es ese el caso normal?
Solución
No, esta notificación es enviada por NSThread
. Si está utilizando pthreads ordinarios, no se enviará.
Otros consejos
De los documentos :
Protegiendo los marcos de cacao para Aplicaciones multiproceso, cacao. Los marcos usan cerraduras y otras formas. de sincronización interna para garantizar se comportan correctamente Para prevenir estos bloqueos de rendimiento degradante en el caso de un solo hilo, sin embargo, El cacao no los crea hasta que el La aplicación genera su primera nueva hilo usando la clase NSThread. Si usted genera hilos usando solo POSIX rutinas de hilo, el cacao no recibir las notificaciones que necesita para sabe que su aplicación es ahora multihilo Cuando eso pasa, Operaciones relacionadas con el cacao. marcos pueden desestabilizar o estrellarse su aplicación.
Para que Cocoa sepa que tiene la intención de Usa múltiples hilos, todo lo que tienes que hacer. hacer es generar un solo hilo usando el NSThread clase y dejar que ese hilo salir inmediatamente. Tu entrada de hilo El punto no necesita hacer nada. Solo el acto de generar un hilo usando NSThread es suficiente para asegurar que la Cerraduras necesarias por los marcos de cacao. se ponen en su lugar.
Si no estás seguro de si Cocoa piensa Su aplicación es multiproceso o no, puedes usar el isMultiThreaded método de NSThread para comprobar.
También se debe tener en cuenta que 'los tiempos han cambiado' desde que se agregó NSWillBecomeMultiThreadedNotification
a Foundation
. La programación multihilo ahora es mucho, mucho más común. Ahora es completamente posible, incluso es probable, que nunca vea esta notificación publicada en una aplicación. Las aplicaciones modernas se convierten en múltiples subprocesos muy temprano en su vida, posiblemente antes de que alguna parte de su código se ejecute. También de la documentación:
Si está desarrollando una biblioteca de cacao, Puedes registrarte como observador para la
NSWillBecomeMultiThreadedNotification
si quieres ser notificado cuando el La aplicación se convierte en multiproceso. Tú No debe confiar en recibir este notificación, sin embargo, como podría ser enviado antes de que su código de biblioteca es alguna vez llamado.
Usaré [NSThread isMultiThreaded]
en lugar de confiar en NSWillBecomeMultiThreadedNotification
.