4

我正在尝试将 FUSE 与 Qt 一起使用,但 fuse_main() 和 app.exec() 有自己的事件循环。这意味着如果我启动一个,另一个将不会启动,因为第一个启动会阻止另一个启动,如下所示。如何处理?

有关 fuse 的更多信息,请访问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();
}
4

3 回答 3

1

您应该在单独的线程上运行文件系统。

于 2010-09-05T04:10:39.400 回答
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);

正如 fuse-devel 邮件列表中所讨论的,将 FUSE 集成到 Qt 中有两种好方法:

  1. 实现它(就像我在qt-fuse中所做的那样):

    Qt mainloop正在运行,FUSE mainloop也在运行,都在不同的线程中。我解决了一些关于 POSIX::signal 到 Qt::signal 转换的问题,因此可以明确关闭。

  2. 修改 FUSE 库以从 Qt 事件循环中直接访问

    Qt 主循环正在运行,不需要 FUSE 主循环,因为它将集成到 Qt 主循环中。没有考虑这一点,但它可能有不同的优势。

希望这可以帮助

于 2013-08-02T15:30:07.860 回答
0

您还可以在单​​独的进程上运行 FUSE 并通过套接字/管道/RPC/... 进行通信。最好在 FUSE 崩溃或忙于做某事的情况下,您的 GUI 仍在工作。

于 2010-09-05T04:15:08.790 回答