Auch auf die Gefahr hin, das ich an euch allen vorbei-rede, weil ich nicht richtig "zugelesen" (aka zugehört
) habe versuch ichs noch mal. Mein Lösungsvorschlag ist der folgende:
Delphi-Quellcode:
TDataThread =
class(TThread)
... bla blubber
end;
TVisualThread =
class(TThread)
... didel dadel
end;
var
DataAvailable : Boolean;
Data : IchKennDenTypNicht;
thrData : TDataThread;
thrViusal : TVisualThread;
procedure TDataThread.Execute();
var
TempData : VonObigemTyp;
begin
while not suspended
ot terminated
do
begin
TempData:=WoGibtsDennHierDieDaten();
//Hier drum kümmern das "Data" solange nicht überschrieben wird, solange der andere Thread die nicht gelese n hat
//danach:
DataAvailable:=true;
sleep(2);
//Oder natürlich WaitForSingleObject oder ähnlich; aber mindestens eine 1ms schlafen, sonst (b)rennt die CPU
end;
end;
procedure TVisualThread.Execute();
begin
while not Suspended
or Terminated
do
begin
if (DataAvailable)
then
begin
Synchronize(MachWasMitDenDaten);
DataAvailable:=false;
end;
sleep(2);
//Der "armen" CPU zuliebe :)
end;
end;
procedure TForm1.Create(Sender:TObject);
begin
DataAvailable:=false;
thrData:=TDataThread.Create ...
thrVisual:=TVisualThread.Create ...
end;