FileSystemWatcher Class | Extending Qt Creator Manual
Description: The FileSystemWatcher class is a file watcher that internally uses a centralized QFileSystemWatcher and enforces limits on Mac OS.

- Extending Qt Creator Manual
- QtCreator
- FileSystemWatcher
- Extending Qt Creator Manual 15.0.0

# FileSystemWatcher Class

class Utils::FileSystemWatcher

The FileSystemWatcher class is a file watcher that internally uses a centralized QFileSystemWatcher and enforces limits on Mac OS. More...

Header: | `#include <FileSystemWatcher>`
Inherits: | QObject

- List of all members, including inherited members

## 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

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/setrlimit.2.html

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.