2010-09-05 4 views
4

J'essaie d'utiliser FUSE avec Qt, mais fuse_main() et app.exec() ont leur propre boucle d'événements. Cela signifie que si je démarre l'un l'autre ne commencera pas, puisque le premier qui commence empêche l'autre de démarrer comme indiqué ci-dessous. Comment faire face à cela?FUSE (Filesystem in Userspace) avec Qt Programming

Pour plus d'informations sur les fusibles, aller à http://fuse.sourceforge.net/

S'il vous plaît, si possible, fournir des exemples.

Merci, Leandro.

Exemple:

celui-ci empêchera fusible pour commencer:

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); // qt event loop 
    a.exec(); 
    fuse_main(argc, argv, &hello_oper); // fuse event loop, it will not start 
    return 0; 
} 

et celui-ci empêchera qt pour commencer:

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); // it will not start due to fuse_main invocation 
    fuse_main(argc, argv, &hello_oper); 
    return a.exec(); 
} 

Répondre

1

Vous devez exécuter le système de fichiers sur un thread séparé .

0

Vous pouvez également exécuter FUSE sur un processus séparé et communiquer via sockets/pipes/RPC/... Il est préférable dans le cas où FUSE se bloque ou est occupé à faire quelque chose, votre interface graphique fonctionne toujours.

0

j'ai créer un exemple simple de la façon dont FUSE et Qt peuvent être utilisés ensemble, voir: https://github.com/qknight/qt-fuse-example

la fuse_main (..) fonction pratique ne peut pas être utilisé comme alors vous n'auriez pas n'importe quel moyen de: - réacheminer les signaux posix - vous ne pouvez pas arrêter le processus de fusible facilement, comme avec l'aide de QFuse.cpp: fuse_unmount (TUP_MNT, fs.ch); pthread_join (fs.pid, NULL);

comme indiqué sur le fusible devel mailinglist, il y a deux bonnes façons d'intégrer FUSE dans Qt:

  1. implémentent (comme je l'ai fait dans qt-fusible):

    Qt mainloop est en cours d'exécution, FUSE mainloop est également en cours d'exécution, à la fois dans différents threads. J'ai résolu certains problèmes concernant POSIX :: signal à la conversion de signal Qt ::, donc un arrêt clair est possible.

  2. modifier la bibliothèque FUSE d'avoir un accès direct depuis la boucle d'événements Qt:

    Qt MainLoop est en cours d'exécution, pas besoin d'un FUSE mainloop comme il serait intégré dans le mainloop Qt. ne s'est pas penché sur cela, mais il pourrait avoir des avantages différents.

espérons que cette aide