Forum: Object-Pascal / Delphi-Language
Delphi
by sirius,
9. Jun 2009
Zu suspend:
Du machst zwar das supend innerhalb deines Threads. Insofern könnte das sogar ok sein, aber ich würde trotzdem die Finger davon lassen.
Forum: Object-Pascal / Delphi-Language
Delphi
by sirius,
8. Jun 2009
Eine vollständige Lösung sähe vielleicht folgendermaßen aus. Wie gesagt: das ist jetzt etwas schlechter von der Performance her und auch etwas größer. Deswegen würde ich bei deinem Problem auch etwas kleineres wählen. Beim Schreiben dieses Codes fielen mir aber noch zwei Probleme in deinem Code auf.
Threadsteuerung mit Suspend und Resume zu machen ist nicht so gut und wird von M$ nicht...
Forum: Object-Pascal / Delphi-Language
Delphi
by sirius,
8. Jun 2009
Zum Nullsetzen solltest du natürlich auch eine Interlockedxxx verwenden. Und das Problem mit der 10 und der elf kannst du ja vorher abfragen.
if FHead<10 then
InterlockedIncrement(FHead)
else
InterlockedExchangeAdd(FHead,-9);
Forum: Object-Pascal / Delphi-Language
Delphi
by sirius,
8. Jun 2009
Du brauchst hier kein RegisterWindowMessage, da du anscheinend ausschließlich in deinem eigenen Process bist und auch sonst braucht man es recht selten. Leg einfach eine Zahl bei WM_User+X fest (X als kleine natürliche Zahl).
So, wie es jetzt geschrieben ist, brauchst du keine CriticalSections. Die dauern viel zu lange. Hier kommt man mit den Interlockedxxxx- Funktionen weiter. Wenn du diese bei...