Je suis conscient des nombreuses questions concernant ce sujet, comme je l'ai moi-même demandé auparavant, mais mon problème semble maintenant plus lié à la partie threading. J'ai les 2 méthodes suivantes.Fileté NSTimer
-(void) restartTimer {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.
target:self
selector:@selector(dim)
userInfo:nil
repeats:YES];
time = 31;
NSLog(@"calling restart timer");
[self performSelectorOnMainThread:@selector(timerImageUpdate) withObject:nil waitUntilDone:NO];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
-(void) resumeTimer {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.
target:self
selector:@selector(dim)
userInfo:nil
repeats:YES];
NSLog(@"calling resume timer");
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
La fonction restartTimer est appelée au début de la partie. Cela fonctionne très bien et la minuterie déclenche bien le sélecteur de luminosité. Le problème se produit lorsque l'utilisateur clique sur mon bouton de saut en succession rapide. [skip] met à jour un MKMapView et dans la méthode déléguée mapdidfinishloading le follwing est appelé: [NSThread detachNewThreadSelector: @selector (restartTimer) toTarget: self avecObjet: nil];
Lorsque cela se produit, il semble que plusieurs temporisateurs soient créés et que par conséquent, ma fonction d'obscurcissement soit trop souvent appelée, ce qui donne l'impression que le fonctionnement du temporisateur unique est très rapide. Quelle est la meilleure façon de démarrer et redémarrer la minuterie en utilisant un thread secondaire? Notez ce problème semble seulement se produire si le bouton de passage est pressé à plusieurs reprises et rapidement, alors que cela fonctionne bien si juste pressé de temps en temps?
Vous avez des idées? Un grand merci
Jules
Merci pour votre aide. Cela peut fonctionner mais le vrai problème que j'ai est pourquoi le minuteur n'est pas invalidant? Timer est une propriété de classe et je le crée sur un thread secondaire. Quand il s'agit d'invalider cela est fait sur le fil principal, cela pourrait-il être la cause? – Jules