Hallo.
Ich habe eine Applikation geschrieben die u.a. viele Bildbearbeitungen macht. Dafür gibt es Progressbars und das Ganze soll in einem Hintergrundthread ablaufen. Um die Position der Progressbar zu setzen benutze ich eine Variable:
und eine Methode:
...
Diese Methode wird NUR über
aufgerufen. Und dennoch kommt es zu Fehlern. Wenn ich die Zuweisung auskommentiere und durch etwas anderes (z.B.
) ersetze, dann passiert nichts (das Programm läuft normal ab).
Ich habe auch schon CriticalSections und VisuForm.Canvas.Lock/Unlock vergeblich ausprobiert. Der Fehler tritt nur auf Multicore-Systemen auf.
Diese ProgressBars werden von dem DWM gerendert. Dies scheint auch in einem separaten Thread zu geschehen, da das Lauflicht (unter Vista) bei Stillstand des Haputthreads weiterläuft.
Gibt es dafür eine Lösung? Ist das ein Bug? Oder mach ich da was falsch?
Ich habe eine Applikation geschrieben die u.a. viele Bildbearbeitungen macht. Dafür gibt es Progressbars und das Ganze soll in einem Hintergrundthread ablaufen. Um die Position der Progressbar zu setzen benutze ich eine Variable:
Code:
strict private BarPos : Integer;
Code:
strict private procedure SetBarPos;
Code:
procedure TMyThread.SetBarPos; begin VisuForm.Bar.Position := BarPos; end;
Code:
Synchronize(SetBarPos);
Code:
Beep;
Ich habe auch schon CriticalSections und VisuForm.Canvas.Lock/Unlock vergeblich ausprobiert. Der Fehler tritt nur auf Multicore-Systemen auf.
Diese ProgressBars werden von dem DWM gerendert. Dies scheint auch in einem separaten Thread zu geschehen, da das Lauflicht (unter Vista) bei Stillstand des Haputthreads weiterläuft.
Gibt es dafür eine Lösung? Ist das ein Bug? Oder mach ich da was falsch?
Comment