【问题标题】:QDir hangs on accessing CIFS remote folder when disconnected断开连接时 QDir 在访问 CIFS 远程文件夹时挂起
【发布时间】:2013-07-29 13:16:47
【问题描述】:

我在 CentOS 6.0 上使用 Qt 4.7。 我有一个使用 CIFS 挂载的远程共享文件夹:

mount -t cifs //PC128/mnt /media/net -o username=user,password=pwd,rw,noexec,soft,uid=user,gid=user

当远程文件夹以某种方式错误地断开连接(例如,网络电缆被拔出)时,我的应用程序挂起,因为 QDir 锁定尝试触摸文件夹(例如 QDir::exists 调用)。大约 90 秒后,它会解锁并返回 false。

看起来不错 - 超时

【问题讨论】:

    标签: qt timeout share mount cifs


    【解决方案1】:

    QDir 使用同步文件 API。当底层文件系统冻结时,它也会冻结。有 2 个选项可以避免 GUI 冻结:

    1. 将文件操作移至单独的线程。使用信号/槽连接请求线程执行QDir::exists 调用并将结果传递回GUI 线程。如果文件系统冻结,只有后台线程将被冻结。 GUI 仍将运行。

    2. 使用使用异步文件 API 的库。该库发出的任何请求都会立即将控制流返回给您的应用程序。结果将传递给回调函数。有关可用选项,请参阅 this question。

    【讨论】:

    • 我试图进一步研究 CIFS 超时,但似乎无法更改它们。所以是的,我将实施解决方案 1 + 手动超时。
    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 2019-01-29
    • 2014-09-22
    • 2015-09-28
    • 1970-01-01
    • 2014-11-21
    • 2022-01-01
    • 2015-05-02
    相关资源
    最近更新 更多