@Piloker: Du musst die CriticalSection ja auch irgendwo initialisieren und später wieder freigeben. Machst du das schon irgendwo?
Ansonsten: Ich hatte mir damals auch Luckies Tutorial durchgelesen, um einen Einstieg in die Threads zu finden (Danke dafür!), aber als Abweichung dazu nutze ich nicht RTL_CRITICAL_SECTION, sondern bin auf die von Delphi angebotenen TCriticalSection umgestiegen. Ist im Umgang vielleicht etwas vertrauter.
Im Quellcode muss die dann an der passenden Stelle initialisiert werden:
myCriticalSection:=TCriticalSection.Create;
Die Benutzung sieht dann so aus:
Delphi-Quellcode:
myCriticalSection.Acquire;
// ...
// mach was kritisches
// ...
myCriticalSection.Release;
Und wenn man sie nicht mehr braucht, kann man sie wieder entsorgen:
myCriticalSection.Free;
Wie gesagt, fand ich von der Handhabung her etwas vertrauter. Und hilft vielleicht, sauber angewandt, auch das Problem zu lösen.
Bis denn
Bommel