Seite 1 von 1

Verzeichnisse überwachen

Verfasst: 09.05.2025 12:07
von EmmJott
Guude! (wie man in Hessen so grüßt)

Ich würde gern den Code aus
https://www.purebasic.fr/english/viewto ... hDirOrFile
verwenden und brauche dazu Hilfe beim Verständnis der Funktionen.

Ich möchte nicht alle Laufwerke (in meinem Fall 4) gleichzeitig überwachen, sondern immer nur das, das gerade "in meinem Fokus" ist, also von mir beobachtet/bearbeitet/sonstwas wird. Wenn ich also gerade auf Laufwerk D: "unterwegs bin", interessiert es mich gerade nicht, was auf den anderen Laufwerken passiert. Würde ich nach E: wechseln, interressiert D: gerade nicht mehr.

Ich würde daher bei jedem Laufwerkswechsel die Überwachung aufrufen. Was, wenn mehrfach das gleiche Laufwerk angesteuert wird? Wie wird die Überwachung für ein Laufwerk beendet?

Re: Verzeichnisse überwachen

Verfasst: 09.05.2025 12:23
von dige
Wenn Du die Threads nicht sauber beendest, wird die Überwachung mehrfach weiter laufen..

Re: Verzeichnisse überwachen

Verfasst: 09.05.2025 12:40
von EmmJott
Hi,
ja, das war so mein Verdacht. Jetzt würde mich interessieren, wie so ein Thread sauber beendet wird.

Re: Verzeichnisse überwachen

Verfasst: 09.05.2025 13:44
von NicTheQuick
Ich würde wahrscheinlich in der Structure `Storage` ein weiteres Feld hinzufügen, z.B. "terminate.i" und es auf #True setzen, wenn sich der Thread beenden soll. Im Thread selbst muss man dann natürlich prüfen, ob `*Storage\terminate` gleich #True ist und ihn dann beenden. Da zwischendurch `CreateFile_` benutzt wird, sollte natürlich dieses Handle auch entsprechend invalidiert werden bevor der Thread beendet wird. In der Linux-Version sollte das selbe dann mit dem Handle von `inotify_init` und `inotify_add_watch` geschehen, aber auch mit `*ReadBuff`. Ich frage mich übrigens warum das da ein Long ist. Ich glaube nicht, dass das richtig ist.
Es sieht nebenbei auch so aus als ob da ein Fehler ist in dieser Zeile:

Code: Alles auswählen

filename$ = PeekS(@*temp\name,-1,#PB_Ascii)
Dateinamen unter Linux sind UTF-8 und nicht ASCII. Ich glaube das ist da falsch, habe es aber nicht überprüft.