FindFirstChangeNotification: doppeltes Signal



  • Hallo!

    Ich habe für einen Dienst nachfolgende Thread-Prozedur geschrieben. Mit WaitForMultipleObjects wartet sie auf 2 Ereignisse: auf ein Signal zum Beenden (HANDLE wird der Prozedur übergeben) und auf ein Signal bei Änderung eines Verzeichnisinhaltes, erzeugt durch FindFirstChangeNotification. Funktioniert soweit, außer daß bei Änderung des Verzeichnisinhaltes die while-Schleife immer 2x aufgerufen wird. Kann mir jemand die Ursache dafür nennen?

    Danke im voraus. Rob'

    void ThreadProcedure(unsigned int index, HANDLE killevent)
    {
      char sourcedir[MAX_PATH];
      strcpy(sourcedir, "C:\\test");
    
      HANDLE change = FindFirstChangeNotification(sourcedir, false,
                FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE);
    
      if (change == INVALID_HANDLE_VALUE) return;
      else
      {
        HANDLE events[2];
        events[0] = killevent; // Beenden des Service
        events[1] = change; // Signal bei Änderung des Verzeichnisses
    
        while (WaitForMultipleObjects(2, events, false, INFINITE) != WAIT_OBJECT_0)
        {
          DoSomething();
    
          FindNextChangeNotification(change); // nächste Änderung auch überwachen
        }
    
        FindCloseChangeNotification(change);
      }
    }
    


  • Vermutlich werden im Verzeichnis 2 (oder mehr) Änderungen durchgeführt... das ist eigentlich normal. Für ein schreiben einer Datei gibt es mehrere Änderungs-Notifications.



  • Danke für Deine Antwort.

    Welche Änderungen sind das dann? Vermutlich keine, die man mit den Filterbedingungen weiter einschränken könnte?

    Rob'



  • Wenn z.B: zweimal "WriteFile" benutzt wird um eine Datei zu schreiben, *kann* es vorkommen, dass Du zwei Benachrichtigungen bekommst... das lässt sich somit nicht verhindern... (ausser mit Vista und Transactional-FS 😉 )



  • Ich kopiere einfach mit dem Windows-Explorer eine Datei in das Verzeichnis, und bekomme das aber 2x signalisiert. Macht da evtl. der Explorer irgendeine Schweinerei?

    Rob'


Anmelden zum Antworten