2010-03-18 11 views
0

J'ai un NSThread que je voudrais désactiver après un certain temps.Délai d'expiration d'un NSThread après un certain laps de temps

[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 
} 

Toute aide que vous pouvez fournir à ce sujet serait grandement appréciée.

Merci,

Zen_silence

Répondre

1

Essayez quelque chose comme ceci:

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]; 

Assurez-vous que vous (1) vérifier workerThread.isCancelled quand le fil se termine pour voir si le fil a expiré, et (2) appeler [timoutTimer invalidate] pour nettoyer la minuterie si la le fil n'a pas expiré.

+0

Ce code ne fonctionne pas le thread s'exécute toujours à la fin. –

+0

J'ai oublié de mentionner que vous devez vérifier périodiquement '[[NSThread currentThread] isCancelled]' dans 'someFunction'. Si cela renvoie 'YES', la fonction devrait nettoyer et retourner immédiatement. Sinon, le thread ne se terminera pas lorsqu'il recevra le message 'cancel'. – Tom

2

Au lieu d'utiliser NSThread, utilisez NSOperation. Vous pouvez ensuite conserver une référence à l'opération et définir un NSTimer pendant 10 secondes. Si la minuterie se déclenche, dites à l'opération de s'annuler elle-même.

+0

Code vous s'il vous plaît envoyer un code montrant comment faire cela? –