FileSystemWatcher Class
class Utils::FileSystemWatcherThe FileSystemWatcher class is a file watcher that internally uses a centralized QFileSystemWatcher and enforces limits on Mac OS. More...
Header: | #include <FileSystemWatcher> |
Public Functions
FileSystemWatcher(int id, QObject *parent = nullptr) | |
FileSystemWatcher(QObject *parent = nullptr) |
Detailed Description
Design Considerations
Constructing/Destructing a QFileSystemWatcher is expensive. This can be worked around by using a centralized watcher.
Note: It is (still) possible to create several instances of a QFileSystemWatcher by passing an (arbitrary) integer id != 0 to the constructor. This allows separating watchers that easily exceed operating system limits from others (see below).
Mac OS Specifics
There is a hard limit on the number of file handles that can be open at one point per process on Mac OS X (e.g. it is 2560 on Mac OS X Snow Leopard Server, as shown by ulimit -a
). Opening one or several .qmlproject
's with a large number of directories to watch easily exceeds this. The results are crashes later on, e.g. when threads cannot be created any more.
This class implements a heuristic that the file system watcher used for .qmlproject
files never uses more than half the number of available file handles. It also increases the number from rlim_cur
to rlim_max
- the old code in main.cpp failed, see last section in
for details.
Member Function Documentation
FileSystemWatcher::FileSystemWatcher(int id, QObject *parent = nullptr)
Adds directories to a watcher with the specified id.
FileSystemWatcher::FileSystemWatcher(QObject *parent = nullptr)
Adds directories to watcher 0.