Change Notification приходит два раза
От: Jerum  
Дата: 13.10.08 15:22
Оценка:
Отслеживаю в директории fPath изменения с помощью механизма FindFirstChangeNotification/FindNextChangeNotification
Вот такой код.


void ProcessNotification()
{
    cout << "file was changed\n";
}

int LookForChangesLoop()
{
    HANDLE hNotify = FindFirstChangeNotification(fPath, false,
                                        FILE_NOTIFY_CHANGE_LAST_WRITE);
    if(hNotify == INVALID_HANDLE_VALUE)
    {
        log.winError("Can not create notification object");
        return -1;
    }
    
    for(;;)
    {
        int waitStatus = WaitForSingleObject(hNotify, INFINITE);

        if(waitStatus == WAIT_OBJECT_0)
            ProcessNotification();
        
        if(!FindNextChangeNotification(hNotify))
        {
            log.winError("FindNextChangeNotification failed");
            return -1;
        }
    }
}


При тестировании обнаружил, что уведомление об изменении приходит как бы два раза подряд, то есть стоит изменить файл внутри директории и в консоль выводится
file was changed
file was changed

Если изменить фильтр на FILE_NOTIFY_CHANGE_SIZE то приходит один раз, но флаг FILE_NOTIFY_CHANGE_LAST_WRITE идеологически более верный.
Что же здесь не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.