IOS: остановить общий поток - PullRequest
0 голосов
/ 06 февраля 2012

В моем приложении я использую этот код для запуска NSThread

[NSThread detachNewThreadSelector:@selector(threadStart) toTarget:self withObject:nil];


- (void)threadStart 
{  
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

//something to do...

[pool release];
}

моя проблема в том, что я хочу иногда запускать и останавливать этот поток, затем я должен объявить поток в .h, чтобы иметь общий поток ... это возможно?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2012

Непонятно, о чем ты спрашиваешь.Потоки не могут быть остановлены из другого потока (безопасно).Существует несколько подходов для работы в фоновом потоке и для управления временем жизни других потоков.

Вы должны описать, что вы пытаетесь выполнить.Почему вы хотите остановить фоновый поток?Иногда нет работы?

0 голосов
/ 06 февраля 2012

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

Согласно Руководству по программированию нитей Apple :

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

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

Вы можете использовать [NSThread exit]; в своем потоке, чтобы остановить себя, т.е. отменить текущий поток,

или вы также можете использовать [NSThread cancel] метод , чтобы сообщить другой поток в вашей программе для отмены ..

...