Вы бы вызвали ReadDirectoryChangesW так, чтобы он возвращал свои результаты асинхронно, если вам когда-нибудь нужно, чтобы вызывающий поток не блокировал. Тавтология, но правда.
Кандидаты на такие потоки: поток пользовательского интерфейса и любой поток, который несет единоличную ответственность за обслуживание ряда ресурсов (сокетов, любого вида IPC, независимых файлов и т. Д.).
Не будучи знакомым с проектом, я предполагаю, что CDirectoryChangeWatcher не заботится о том, блокирует ли его рабочий поток. Как правило, это характер рабочих потоков.