Mein Ansatz ist, daß ich kleine Zeitscheiben definiere, innerhalb derer (und evtl. auch etwas darüber hinaus) die Aufräumaktionen stattfinden sollen. Diese Zeitscheiben sollen im Mittel annähernd eingehalten werden, d.h. wenn die Abarbeitung der Methode mal mehr als die 50 ms benötigt, fällt sie beim nächsten Takt einfach mal aus.
Das eigentliche Problem ist also nicht der Timer an sich, sondern die Notwendigkeit, Daten aus einem Takt (nämlich z.B. den Anteil der verbrauchten Prozessorzeit oder notfalls ein Flag "Nichts verändern, die Methode läuft noch vom vorherigen Takt": boolean) sicher in den folgenden Takt hinüberzuretten - was offenbar nicht mit CriticalSections zu gehen scheint, aber auch nicht ohne das gleichzeitige Lesen und Schreiben einer Variablen (etwa der genannten booleschen) zu riskieren.
Die Idee mit dem Ansatz "Kurz was ausführen, dann sleep(50)" war mir auch schon gekommen, aber ich will für die 50ms nicht das ganze Programm anhalten
Der genannte Thread ist nur einer von insgesamt dreien, von denen einer recht zeitkritisch ist und auch in den Ruhepausen des Aufräumthreads laufen muß.
The problem with troubleshooting is that sometimes the trouble shoots back.