[wxWidget] permanente Überwachung von Dateien und Verzeichnissen
-
Das mit dem überprüfediefiles oder tun wir mal so als könnten wir englisch checkfiles, kommt später, erstmal muss das gerüst stehen. von daher hat mir das schon einiges geholfen.
Ich hab nämlich eine Schleife drin gehabt, die beim Entry() permanent lief. Das bedeutet auch permanente CPU-Last. Das ist mir aufgefallen, als ich Blue-Tigers Posting gelesen habe. Der Thread startete, hing in der Schleife und kam garnicht mehr bis zum Sleep.
Auf die Idee mit Sleep bin ich auch gekommen, aber es funktionierte nicht, von daher danke für den Augenöffner *g*
Auch dank an den Hinweis mit der winAPI, das schaue ich mir an, wenn meine "Künste" nun versagen sollten *fg*
Grüße Gucky2000
PS: Freue mich trotzdem über weitere Tipps, falls jemand noch welche hat. Ich möchte nämlich die Uhrzeit der letzten Dateiänderung (write nicht access) auf Veränderung prüfen.
-
Hier mein Senf in Form einer wxThread::Entry(), die zu meiner Zufriedenheit arbeitet:
void* myThread::Entry(){ while( 1){ // wxMessageBox( "Animation running"); if( TestDestroy()) break; TuWasWahnsinnigWichtiges(); Sleep( 150); // t in ms // wxSleep( 2); // t in s } return NULL; }
Die erste Zeile sorgt dafür, dass man den Thread von außen pausieren und/oder beenden kann. Z.B. mit wxThread::Delete().
Ciao
luker
-
yapp so ähnlich sieht meine Entry() auch aus, nur die If abfrage mit dem TestDestroy() hatte ich nicht.
was macht denn mehr sinn, Sleep oder wxSleep? Oder isses Wurst?Grüße
-
Welche der beiden Funktionen man nimmt, richtet sich ganz danach, wie lange der Thread schlafen soll bzw. wie genau man das haben will. Wie schon im Kommentar steht, bedeutet der Parameter von wxSleep() eine Zeit in Sekunden, der von Sleep() in Millisekunden.
Um das ganze noch weiter zu verwirren, kann man auch wxMilliSleep() benutzen, das auch eine Zeit in Millisekunden erwartet.
Und dann sollte man sich im Klaren sein, dass man eine Millisekunde zwar als Parameter angeben, aber nicht als exaktes Ergebnis erwarten kann. Für so genaue Messungen sind handelsübliche Betriebssysteme nicht gebaut.
-
Mit wxSleep und wxMilliSleep ist man aber auf jedenfall plattformunabhängig, da Sleep afaik Windows spezifisch ist.
-
Danke für die ausführliche Antwort, werde einfach mal ein wenig damit rumspielen, ob es einen Unterschied für mich im praktischen Sinne gibt. Die Genauigkeit spielt für mich eigentlich keine Rolle, zumindest bis jetzt nicht. Das die Angaben nicht sehr genau sind, habe ich bereits gemerkt, hängt auch stark davon ab, was in der Schleife mit dem Sleep passiert (wxMessageBox zum Beispiel verzögert den Sleep, bis man diese Box bestätigt/schließt) Sollte man also bei Fehlermeldungen berücksichtigen.
Danke nochmal und Grüße
Gucky2000
-
GUI gehört in wxWIdgets immer in den Hauptthread, das gilt auch für MessageBoxen.
-
Die habe ich momentan zu Testzwecken drin, um zu gucken ob er auch das ausliest was er soll *g*. Eine Übergabe an den Hauptthread, wäre in der Testphase (es fliegt ja raus wenn es das tut was es soll) ist nicht gerade sinnvoll, da ich mich dann um das pausieren des unterthreads kümmern muss, und so bleibt er eben mal kurz stehen, bis ich die Ausgabe in Ruhe analysieren konnte.
Später werden Hinweisfenster über Eventhandler an den Mainthread übergeben. Zumindest ist es so geplant *g*Grüße
Gucky2000
-
-
Ja, dass habe ich auch gelesen und mir angeschaut, evilissimo. Habe jedoch das Problem beim Thread beheben können und werde erstmal bei den wxWidgets Lösungen bleiben (wxFileSystem, wxFileName, etc.). Dadurch wäre eine portierung auf andere Systeme später einfacher.
Sollte das nicht funktionieren so wie ich möchte, werd ich mir die winAPI vorknöpfen *g*
Danke nochmal allen, die so hilfreiche Tipps gegeben haben.Grüße
Gucky2000