【问题标题】:How to quickly check network paths with Qt 5.2 (C++)如何使用 Qt 5.2 (C++) 快速检查网络路径
【发布时间】:2014-09-22 15:32:13
【问题描述】:

我希望是一个相当简单的问题。

在 Qt 应用程序中,我经常访问工作组网络中 Windows PC 上的文件夹。网络路径的形式为"\\NETWORKDEVICE\folder" 或沿这些行。为了检查路径是否存在,我一直在使用 QDir,如下所示:

pathString = "somepathhere";
if(QDir(pathString).exists())
    workHere(pathString);

在其他情况下,我使用 QUrl 通过 Windows 资源管理器打开特定文件或文件夹,如下所示:

pathString = "somepathhere";
QUrl url = pathString;
QDesktopServices::openUrl(url);

我可以像这样混合两者,以确保路径事先存在。

pathString = "somepathhere";
if(QDir(pathString).exists())
{
  QUrl url = pathString;
  QDesktopServices::openUrl(url);
{

问题是每当我使用 QDir::exists() 时,如果路径当前处于脱机状态或与运行我的程序的那台 PC 的连接很差,Windows 会将应用程序挂在那里长达 40 秒在返回 QDir::exists() 的答案之前。 (如果您尝试在资源管理器中打开一条向下的网络路径,您会看到同样的反应;地址栏在搜索时会缓慢填充绿色,直到它放弃。)

我的程序等待响应的时间非常长,所以我想知道是否有人对如何处理这种情况有更好的想法。我可能忽略了一些设置或替代功能,但截至目前我没有想法。我希望使用此代码来确保在指定文件和文件夹处于脱机状态时访问我的备用文件和文件夹。

非常感谢您的帮助,如果我错过了网站上的任何规则或礼仪,我深表歉意。

【问题讨论】:

    标签: c++ windows visual-studio-2012 networking qt5


    【解决方案1】:

    我相信,如果操作系统调用(并且在所有 QT 包装器之后,存在操作系统调用)挂起一段时间,那么您将无法立即获得任何有用的结果。如果是这样,你能做的最好的事情就是把这项工作放到另一个线程中,并在它完成时向主线程发出信号。在主线程中,您可以在某处打印一些状态或绘制带有“Waiting...”标志的漂亮图片。

    【讨论】:

    • 我担心会是这样。我对 Qt 很陌生,所以我现在对使用 QThreads 等感到很舒服。我想从好的方面来说,为此实现一个线程比进行相机输入处理要容易,因为这让我在今天早上卡了几天。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多