Как убить тему с помощью Objective C? - PullRequest
2 голосов
/ 29 августа 2009

У меня есть вызов сторонней библиотеки C ++, которую я поместил в ее собственный поток (в настоящее время использующий NSThread). Я хотел бы дать пользователю возможность остановить выполнение этого потока. (Я хорошо знаю обо всех проблемах, которые это может вызвать, но я все еще хочу это сделать.)

Согласно Руководству по программированию нитей Apple , в Какао есть возможности сделать это. Верно ли это и для iPhone, или мне нужно полагаться на потоки Posix для достижения моей цели?

Приветствия

MrMage

1 Ответ

10 голосов
/ 29 августа 2009

Правильный способ остановить выполнение вашего потока - попросить его прекратить выполнение. Затем в своей ветке вы слушаете такие запросы и выполняете их в подходящее время.

Как говорит сама страница, на которую вы ссылаетесь:

Хотя Cocoa, POSIX и Multiprocessing Services предлагают процедуры для непосредственного уничтожения потоков, использование таких процедур настоятельно не рекомендуется. Уничтожение нити не позволяет этой нити очиститься после себя Память, выделенная потоком, может быть утечка, и любые другие ресурсы, используемые в данный момент потоком, могут быть не очищены должным образом, что впоследствии может создать потенциальные проблемы.

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

...