отменить фоновый поток в Objective-C - PullRequest
3 голосов
/ 25 июля 2010

Как отменить фоновый поток в Objective-C?

Я вызываю фоновые потоки примерно так:

[self performSelectorInBackground:@selector(setupThumbnails) withObject:nil];

Вызывается, когда происходит свайп, для каждого свипа я хочу отменить предыдущий запрос фонового потока.

1 Ответ

2 голосов
/ 25 июля 2010

Сохраняйте свойство отмены для вашей темы и периодически проверяйте его в своей теме.Вам нужно будет использовать блокировку или элементарную функцию (как предусмотрено операционной системой и ее структурами, а не реализовано самостоятельно!), Чтобы указать, что поток должен быть отменен.Предоставленные системой элементарные функции описаны в справочной странице atomic.

Еще лучше было бы использовать NSOperation в NSOperationQueue вместо NSThread.Он по-прежнему будет выполнять работу в фоновом режиме, используя поток, но он позволяет инфраструктуре и операционной системе управлять пулом потоков от вашего имени, а сама NSOperation имеет свойство isCancelled, которое вы можете проверить, а также возможность отмены любого из них.отдельная NSOperation или все операции во всей NSOperationQueue.

Например, у вас может быть операция «настроить один эскиз», а затем просто добавить одну такую ​​операцию в очередь для каждого миниатюры, которую нужно настроить.Операционная система и инфраструктура будут взаимодействовать для управления количеством потоков, используемых для выполнения этих операций, хотя вы также можете установить ширину очереди, чтобы гарантировать, что одновременно будет выполнено только самое большое количество операций импорта.И если пользователь отменяет, вы можете просто попросить очередь отменить все незавершенные операции.

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