Будет ли система отправлять NSWillBecomeMultiThreadedNotification, когда я создаю потоки POSIX? - PullRequest
1 голос
/ 22 октября 2009

Я попробовал, но я думаю, что это уведомление не приходит. Это нормальный случай?

Ответы [ 3 ]

3 голосов
/ 22 октября 2009

Нет, это уведомление отправлено NSThread. Если вы используете обычные потоки, они не будут отправлены.

1 голос
/ 22 октября 2009

С документы :

Защита какао-каркасов для многопоточные приложения, какао рамки используют замки и другие формы внутренней синхронизации для обеспечения они ведут себя правильно. Предотвращать эти замки от унизительной производительности в однопоточном случае, однако, Какао не создает их, пока приложение порождает свой первый новый поток с использованием класса NSThread. Если вы порождаете темы, используя только POSIX подпрограммы потока, какао не получать уведомления, необходимые для знать, что ваше приложение сейчас многопоточный. Когда это произойдет, операции с участием какао рамки могут дестабилизировать или потерпеть крах ваше заявление.

Чтобы сообщить Какао, что вы намереваетесь использовать несколько потоков, все что вам нужно сделать это создать один поток, используя Класс NSThread и пусть этот поток немедленно выйти. Ваша тема Дык не нужно ничего делать. Просто акт порождения потока с помощью NSThread достаточно, чтобы обеспечить замки, необходимые для структур Какао поставлены на место.

Если вы не уверены, думает ли Какао ваше приложение многопоточное или нет, вы можете использовать isMultiThreaded метод NSThread для проверки.

0 голосов
/ 23 октября 2009

Следует также отметить, что «времена изменились» с тех пор, как NSWillBecomeMultiThreadedNotification был добавлен к Foundation. Многопоточное программирование сейчас намного, гораздо более распространено. Теперь вполне возможно, даже вероятно, что вы никогда не увидите это уведомление в приложении. Современные приложения становятся многопоточными очень рано, возможно, еще до того, как какая-либо часть вашего кода будет выполнена. Также из документации:

Если вы разрабатываете библиотеку Какао, Вы можете зарегистрироваться в качестве наблюдателя для NSWillBecomeMultiThreadedNotification если вы хотите получать уведомления, когда приложение становится многопоточным. Вы не следует полагаться на получение этого уведомление, как бы то ни было отправляется до того, как код вашей библиотеки когда-либо звонил.

Я бы использовал [NSThread isMultiThreaded] вместо того, чтобы полагаться на NSWillBecomeMultiThreadedNotification.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...