?
Mhhhhh...
Jetzt hab' ich mich bislang sooo schön um die lustigen C++ Dinge wie pure virtuals etc. rumgedrückt, und für Threads brauch' ich'se... *grummel*
Ich bekomm' es nicht mal vernünftig hin, daß man von abgeleitete Klassen den Destruktor NICHT aufrufen kann (mit delete). Bzw. wenn, sind die public-Methoden die in CThread definiert sind nicht mehr aufrufbar. Irgendwie blick' ich das mit den Klassen-Vererbungen in C++ wohl noch nicht so...
Original erstellt von Marc++us:
**Hm ja, das WaitForSingleObject kann auch in den Dtor rein.
INFINITE als Parameter ist gefährlich, weil... kannst Du Dir ja denken. :)**
Okay. Ja, aber "rein theoretisch" müsste es funzen. Es sei denn der Thread hat sich abgeschossen. Und das kann doch eigentlich nur durch fehlerhafte Speicherzugriffe passieren (RAM übertaktet etc.), oder?!
Auf der anderen Seite kann jede Zeit dazu führen, daß Du zu kurz wartest. So sonderlich genau ist die Zeitberechnung auf Desktop-OSen nicht! Als Wartezeit ist wohl ein Vielfaches Deiner Intervallzeit angemessen.
Meinst Du echt?!? Ein VIELFACHES????
Darf ich gleich noch 2 Tipps geben:
Sicher!! Nur deswegen poste ich hier...! *freu*
Was machst Du, wenn die Verarbeitungszeit von AusfuehrungsSchleife() so groß ist, daß Dein folgendes Sleep-Intervall "angeknabbert" wird? Du willst doch z.B. alle 150 msecs eine Funktion starten. Wenn diese aber nun 40msecs braucht... dann dürfte im Sleep nur 110 msecs gewartet werden.
Ja, schon klar. Und noch viel interessanter ist die Frage, was passiert, wenn die Ausführung weitaus länger dauert, als das eigentliche Intervall. Und das wird es später wohl. Der Thread müsste also selbst überprüfen, ob er noch "Zeit übrig" hat, und wenn nicht, die Abarbeitung an einen anderen (wartenden) Thread übergeben...
Echt knifflig.
Und zudem wirst Du feststellen, daß Deine Beendigung des Threads über _endthread zu hart ist. Angenommen, in der Ausfuehrungsfunktion ist eine Datei offen... _endthread schießt den Thread einfach ab, Datei nicht geschlossen, Datenverlust, Peng.
Spendiere Deiner Klasse noch zwei virtual Methoden:
virtual void AusfuehrungsSchleife();
virtual void AusfuehrungStart();
virtual void AusfuehrungEnde();
Ja, okay. Verstehe. Init()- und De-Init()-Methoden für den Thread also. Okay.
Das hört sich gut an.
Mhhhh... unter Java ist es soooo viel einfacher!
Naja, mal sehen, da werde ich mich auf jeden Fall noch weiter mit beschäftigen.
Danke mal wieder!
Sarge