我正在尝试将FUSE与Qt一起使用,但fuse_main()和app.exec()有自己的事件循环。这意味着如果我开始一个,另一个将无法启动,因为第一个启动会阻止另一个启动,如下所示。怎么处理这个?
有关保险丝的更多信息,请转到http://fuse.sourceforge.net/
如果可能,请提供示例。
谢谢你, Leandro的。
示例:
这个会阻止保险丝启动:
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();
}
答案 0 :(得分:1)
您应该在单独的线程上运行文件系统。
答案 1 :(得分:0)
您还可以在单独的进程上运行FUSE,并通过套接字/管道/ RPC / ...进行通信。在FUSE崩溃或忙于执行某些操作的情况下,首选您的GUI仍在工作。
答案 2 :(得分: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有两种很好的方法:
实现它(正如我在 qt-fuse 中所做的那样):
Qt mainloop 正在运行, FUSE mainloop 也在运行,在不同的线程。我解决了POSIX :: signal to Qt :: signal转换的一些问题,因此可以明确关闭。
修改FUSE库以直接从Qt事件循环访问:
Qt mainloop 正在运行,不需要FUSE主循环,因为它将集成到Qt主循环中。没有考虑到这一点,但它可能有不同的优势。
希望这会有所帮助