Fundation Tool et multi-thread : des particularités ?
LeChatNoir
Membre, Modérateur
Salut !
Bon je digère doucement le manque de RAM de mon MacBook pour me remettre au boulot
Je suis en train de tenter de faire un petit exécutable "batch" qui se lancerai en ligne de commande et qui permettrait de transférer un fichier vers un serveur sftp.
Je comptais utiliser le même framework que pour Pom'F (à savoir le framework Connection de G.Hulands) mais je me heurte à un problème qui semble lié au "mode" fundation tool...
Le framework utilise des multi thread qui informent le delegate des différents états (genre, connection ok, dl en cours, connetion interrompue, etc).
Dans mon main, je défini donc un object controller qui va instancier la connexion et s'auto déclaré delegate.
Le genre de chose qui fonctionne impecc' en "Cocoa application" mais là , ça ne marche pas. La connexion s'instancie correctement mais les notifications ne sont jamais envoyées au delegate....
Des idées ?
a+
Bon je digère doucement le manque de RAM de mon MacBook pour me remettre au boulot
Je suis en train de tenter de faire un petit exécutable "batch" qui se lancerai en ligne de commande et qui permettrait de transférer un fichier vers un serveur sftp.
Je comptais utiliser le même framework que pour Pom'F (à savoir le framework Connection de G.Hulands) mais je me heurte à un problème qui semble lié au "mode" fundation tool...
Le framework utilise des multi thread qui informent le delegate des différents états (genre, connection ok, dl en cours, connetion interrompue, etc).
Dans mon main, je défini donc un object controller qui va instancier la connexion et s'auto déclaré delegate.
Le genre de chose qui fonctionne impecc' en "Cocoa application" mais là , ça ne marche pas. La connexion s'instancie correctement mais les notifications ne sont jamais envoyées au delegate....
Des idées ?
a+
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu te donnes la réponse à toi même...
Pour un foundation tool, tu dois gérer le runloop toi-même, surtout si tu vas utiliser des classes qui vont faire appel aux delegates, notifications, timers, etc...
Dans un cocoa application, c'est fait automatiquement par NSApplicationMain.
mets un [[NSRunLoop currentRunLoop] run]; au début du main...
.
Ca marche nickel !
Du coup, dans mon main, j'instancie mes petits objets (notament mon delegate), puis je lance la runLoop.
Ca marche bien.
Seulement voilà . Une fois mon transfert finito, je voudrais bien quitter ma RunLoop...
Et j'ai rien trouvé de tel dans l'objet RunLoop...
Faut que je passe par un NSApplication ? Il définit lui même sont RunLoop et j'ai plus qu'à faire un terminate (ou stop, je sais plus) ?
En attendant cette dernière précision, merci !
Etrangement, il n'existe effectivement pas (en cocoa) de méthode pour arrêter le runloop.
NSApplication ne te sera d'aucun recours, puis n'existant pas à ton niveau.
Donc, quand cocoa ne suffit pas, alors on passe à carbon :
CFRunLoopStop([[NSRunLoop currentRunLoop] getCFRunLoop]);
.
Merci encore, je vais pouvoir finir mon petit bout de code !
a+
Ben ça marche super sauf qu'il faut lancer la runloop via la fonction Carbon sinon, le Stop est inefficace.
Donc faut faire CFRunLoopRun() plutôt que [[NSRunLoop currentRunLoop] run];
Merci encore !
A+