2013-07-29 41 views
1

我在CentOS 6.0上使用Qt 4.7。 我有安装有CIFS远程共享文件夹:QDir在连接时访问CIFS远程文件夹时挂起

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

当远程文件夹被以某种方式不正确地断开(例如,网络电缆被拉出)我的应用程序挂起因为试图触摸的文件夹的QDir锁(例如一个QDir ::存在调用)。约90秒后解锁并返回false。

它看起来正确的 - 超时

回答

1

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

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

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

+0

我试图进一步研究CIFS超时,但它接近无法改变它们。所以是的,我要实施解决方案1 ​​+手动超时。 –