2010-09-05 38 views
4

我試圖使用FUSE使用Qt,但fuse_main()和app.exec()有自己的事件循環。這意味着如果我開始一個,另一個不會開始,因爲第一個開始阻止另一個開始,如下所示。如何處理這個?FUSE(文件系統用戶空間)使用Qt編程

有關保險絲的詳細信息,請http://fuse.sourceforge.net/

請,如果可能的話,提供的例子。

謝謝 萊昂德羅。

例子:

這一項將防止保險絲啓動:

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; 
} 

而這一次將防止QT開始:

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(); 
} 

回答

1

你應該在一個單獨的線程上運行的文件系統。

0

您也可以在一個單獨的進程中運行FUSE,並通過插座/管材/ RPC通信/ ...最好是在FUSE崩潰或忙於什麼事情的情況下,你的GUI仍正常工作。

0

我創建的FUSE如何和Qt可以一起使用一個簡單的例子,請參閱: https://github.com/qknight/qt-fuse-example

的fuse_main(..)便利功能無法使用的,那麼你就不會的任何方法: - 重新路由POSIX信號 - 你不能關閉熔絲過程容易,像使用QFuse.cpp: fuse_unmount(TUP_MNT,fs.ch); pthread_join(fs.pid,NULL);

上熔斷器devel郵件列表,討論,有兩種好方法FUSE整合到Qt:

  1. 實現它(正如我在QT-保險絲沒有):

    Qt的主循環運行,FUSE主循環也是在不同的線程運行,兩者。我解決了一些關於POSIX :: signal到Qt :: signal轉換的問題,所以清除關閉是可能的。

  2. 修改FUSE庫有從Qt的事件循環直接訪問:

    Qt的主循環運行,無需使用FUSE主循環,因爲它會被集成到Qt的主循環。沒有考慮到這一點,但它可能有不同的優勢。

希望這有助於

相關問題