我有一個程序依賴於添加到文件夾中的文件。即使用戶將MANY(> 200)文件添加到此文件夾,也不會註冊任何文件。Qt:我應該在一個線程上運行QFileWatcher嗎?
當收到來自QFileWatcher的信號時,我正在讀取並創建一部分數據的圖像,並且執行此操作可能需要幾秒鐘的時間。 QFileWatcher和處理信號的函數都駐留在同一個類中。我擔心這個類有時可能會很忙,並可能導致QFileWatcher不註冊某些文件。
我應該將QFileWatcher添加到線程以確保數據註冊?
我在做什麼截至目前
在main.cpp中:
...
MainWindow w;
w.setupFolderMonitoring();
...
在mainwindow.h:
...
public:
void setupFolderMonitoring();
void detectFolderChanges();
private:
QString monitoredPath;
QFileSystemWatcher watcher;
...
在mainwindow.cpp:
...
void MainWindow::setupFolderMonitoring() {
watcher.addPath(monitoredPath);
QObject::connect(&watcher, SIGNAL(directoryChanged(QString)), this,
SLOT(detectFolderChanges()));
}
void MainWindow::detectFolderChanges() {
qDebug() << "Dir was changed";
}
...
文件監視功能由操作系統內核以及可能的系統範圍的文件監視服務提供。所有這些都是異步工作的,並且您的應用程序不會因繁忙而失去任何事件 - API旨在處理這一問題。不過,您應該擔心爲您的用戶提供流暢的用戶界面感受。在Qt中,沒有「丟失」信號的概念。直接連接的信號只是間接的函數調用,排隊的槽調用放在事件循環中。沒有什麼會「失去」。 –
謝謝你澄清這一點。圍繞這些主題中的一些可能會很困難。 – Attaque