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

时间:2013-07-29 16:30:56

标签: qt timeout share mount 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。

看起来正确 - 超时

1 个答案:

答案 0 :(得分:1)

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

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

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

相关问题