Узнать, когда закончился NSThread - PullRequest
1 голос
/ 17 мая 2011

У меня есть несколько функций, которые мне нужно вызывать при нажатии кнопки.Я использую [self getamountofdatacenters]; для вызова этих функций.Когда я нажимаю кнопку, симулятор застревает до тех пор, пока не завершится выполнение всех функций, и это занимает 5-7 секунд, поэтому я пытаюсь использовать NSThread:

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

Я делаюэто три раза с различными функциями, но я хочу выяснить, каков прогресс NSThread и поймать его, когда он действительно будет сделан.Как я могу это сделать?Спасибо.

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Забудьте о явных темах и используйте GCD :

dispatch_async(dispatch_get_global_queue(0, NULL), ^{
    [self getNumberOfDataCenters];
    dispatch_sync(dispatch_get_main_queue(), ^{
        // The work is done, do whatever you need.
        // This code is executed on the main thread,
        // so that you can update the UI.
    });
});
0 голосов
/ 17 мая 2011

Один из вариантов - «поймать» конец выполнения потока на уровне приложения: в коде, который вы публикуете в альтернативном потоке, запускайте NSNotification сразу после его завершения. В основной ветке вы наблюдаете это уведомление и реагируете соответственно.

Вы также можете проверить состояние потока, используя -isExecuting, -isFinished и -isCancelled.

...