断开连接时,QDir在访问CIFS远程文件夹时挂起



我在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。

它看起来是正确的-的超时

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

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

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

最新更新