J'ai un NSOperation qui télécharge des données en utilisant NSURLConnection, il semble un peu comme ceci:Annulation de l'opération avec connexion à l'intérieur
....
- (void)main
{
....
while (!self.isCancelled && !self.isLoaded)
{
[NSRunloop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NDate distantFutute]];
}
....
}
Le problème est que de temps à connexion se bloque de temps et comme il n'y a pas d'autres sources mise à feu , la boucle continue de tourner pour toujours, ne laissant aucune chance d'annuler l'opération. Comme il y a une limite pour 1 opération dans ma file d'attente, tout est bloqué.
La question est quelle serait la meilleure solution à ce problème.
- Au lieu de remoteFuture, utilisez une période plus courte d'une demi-seconde. (Va probablement manger des cycles de cpu supplémentaires)
- Essayez de stocker une référence au thread en cours d'exécution dans la boucle d'exécution ivar et tickle via un sélecteur sur le thread dans la méthode d'annulation de l'opération. (Peut entraîner une situation où nous mettons en file d'attente un sélecteur sur une boucle d'exécution qui a déjà quitté et ne fonctionnera plus, ce qui entraîne une fuite autant que je sache)
Ou peut-être existe-t-il un autre moyen?
Approche très intéressante. J'essaierai certainement cela, merci. – stackzerad
Juste une question de plus. Qu'est-ce qui crée et signale la source? pourquoi je ne peux pas simplement appeler CFRunLoopWakeUp? – stackzerad
Peut-être que c'est inutile. Essayez d'utiliser simplement 'CFRunLoopWakeUp()' et voyez. –