Fundation Tool et multi-thread : des particularités ?

LeChatNoirLeChatNoir Membre, Modérateur
03:50 modifié dans API AppKit #1
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+

Réponses

  • BruBru Membre
    03:50 modifié #2
    dans 1165788292:

    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 ?


    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...

    .
  • LeChatNoirLeChatNoir Membre, Modérateur
    03:50 modifié #3
    Trop fort.
    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 !

  • BruBru Membre
    03:50 modifié #4
    dans 1165827997:

    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) ?


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

    .
  • LeChatNoirLeChatNoir Membre, Modérateur
    03:50 modifié #5
    Ah ben d'accord.  o:)
    Merci encore, je vais pouvoir finir mon petit bout de code !
    a+
  • LeChatNoirLeChatNoir Membre, Modérateur
    03:50 modifié #6
    Hello,
    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+

Connectez-vous ou Inscrivez-vous pour répondre.