我有一个程序依赖于添加到文件夹中的文件。即使用户将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