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> |
Inherits: | QObject |
Public Functions
FileSystemWatcher(QObject *parent = nullptr) | |
FileSystemWatcher(int id, 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 macOS (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
[explicit]
FileSystemWatcher::FileSystemWatcher(QObject *parent = nullptr)
Creates a file system watcher with the ID 0 and the owner parent.
[explicit]
FileSystemWatcher::FileSystemWatcher(int id, QObject *parent = nullptr)
Creates a file system watcher with the ID id and the owner parent.