Hallo.
Ich habe eine Frage zum Thema Threads.
Ich habe einen Thread, der über eine Critical Section auf ein Element zugreift.
Ein anderes Objekt will ab und zu ebenfalls auf dieses Element zugreifen (ebennfalls über Critical Section).
Nun habe ich beim ersten Test festgestellt, das das Objekt nie Zeit bekommt zuzugreifen. Der Thread läuft ständig, und belegt die ganze Zeit die Critical Section.
Wenn ich eine kurze Pause im Thread einfüge, dann geht es. Aber nun läuft das Programm irgentwie "unrund". Wenn ich die Form mit der Maus verschieben will, bewegt es sich sehr hagelig.
Liegt das an dem Sleep Befehl?
Wie kann ich das Problem sonst lösen?
Hier der Code:
Delphi-Quellcode:
//Der Thread
procedure einThread.execute;
begin
while not Terminated do
begin
try
//Pause, ansonsten würde eine andere Critical Section keine Zeit bekommen
sleep(20);
FCritSect.Enter;
//Zugriff auf ein Objekt (Lesefunktion von Indy10)
FCritSect.Leave;
except
end;
end;
end;
//Das andere Objekt
procedure Datensenden;
begin
try
self.FCritSect.Enter;
//Zugriff auf ein Objekt (Schreifunktion von Indy10)
self.FCritSect.Leave;
except
end;
end;