Тайм-аут NSThread через определенное время - PullRequest
0 голосов
/ 19 марта 2010

У меня есть NSThread, который я бы хотел отключить через некоторое время

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

- (void) someFunction {
   //Some calculation that might take a long time.
   //if it takes more then 10 seconds i want it to end and display a error message
}

Буду весьма признателен за любую помощь, которую вы можете оказать.

Спасибо,

Zen_silence

Ответы [ 2 ]

2 голосов
/ 19 марта 2010

Вместо использования NSThread используйте NSOperation. Затем вы можете сохранить ссылку на операцию и установить NSTimer на 10 секунд. Если таймер срабатывает, скажите, чтобы операция отменилась.

1 голос
/ 19 марта 2010

Попробуйте что-то вроде этого:

workerThread = [[NSThread alloc] initWithTarget:self selector:@selector(someFunction) object:nil];
[workerThread start];
timeoutTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:workerThread selector:@selector(cancel) userInfo:nil repeats:NO];

Убедитесь, что вы (1) проверили workerThread.isCancelled, когда поток завершил работу, чтобы увидеть, истек ли поток, и (2) вызвали [timoutTimer invalidate], чтобы очистить таймер, если поток не истек.

...