2014-09-22 88 views
1

我有我希望的是一個相當簡單的問題。如何用Qt 5.2快速檢查網絡路徑(C++)

在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 ::存在(),如果路徑當前處於脫機狀態或連接不良,從我的程序運行的位置是PC,Windows將應用程序掛起那裏爲長達40秒,然後返回QDir :: exists()的答案。 (如果您嘗試在資源管理器中打開向下的網絡路徑,則會看到相同的反應;地址欄在搜索時會緩慢地以綠色填充,直到它放棄。)

這是我的程序非常長的時間等待這種迴應,所以我想知道是否有人對如何處理這種情況有更好的想法。我可能忽略了一些設置或替代功能,但是到目前爲止,我已經沒有想法。我希望使用此代碼來確保在指定的文件和文件夾脫機時訪問替代文件和文件夾。

非常感謝任何幫助,如果我錯過了網站上的任何規則或禮節,我很抱歉。

回答

0

我相信,如果操作系統調用(並且畢竟QT包裝,有一個OS調用)會掛起一段時間,那麼您不能立即得到任何有用的結果。如果是這樣,你可以做的最好的事情就是將這個工作放到另一個線程中,並在完成時向主線程發出信號。在主線程中,您可以在某處打印某種狀態,或者在「等待...」標誌上繪製出美麗的圖像。

+0

我很害怕情況會如此。我對Qt非常陌生,所以我現在正習慣使用QThreads等。我想在這方面實現一個線程的亮點比做攝像頭輸入處理要容易幾天,直到今天早上。 :d – Ketta 2014-09-22 16:22:20