Okay... Also das Zwischenobjekt ist in etwas so definiert:
Delphi-Quellcode:
TConnection = class
private
owner: TWThread;
weight: Double;
public
constructor Create(aOwner: TWThread;aConn: TWThread);
procedure ProcessSignal();
end;
procedure TConnection.ProcessSignal;
begin
owner.ReceiveSignal;
Inc(weight);
end;
Die Threads sehen in etwa so aus:
Delphi-Quellcode:
TWThread = class(TThread)
private
value: Integer;
public
constrctor Create;
procedure CreateConnection(target: TWThread);
function ReceiveConnRequest(link: TWThread): TConnection;
procedure ReceiveSignal;
procedure Execute();override;
end;
procedure TWThread.CreateConnection(target: TWThread);
begin
connectionList.Add(target.ReceiveConnRequest(self));
end;
function TWThread.ReceiveConnRequest(link: TWThread): TConnection;
begin
Result:=TConnection.create(self,link);
ownedConns.Add(Result);
end;
procedure TWThread.Execute();
begin
while not Terminated do
begin
if berechnungen_moeglich then
begin
rechnen;
irgendwann do
connectionList[item].ProcessSignal;
end else Suspend;
end;
procedure TWThread.ReceiveSignal;
begin
Inc(value);
if Suspended then Resume;
end;
Zitat von
stoxx:
wo liegen jetzt die Daten, auf die beide Threads gleichzeitig schreiben und lesen könnten?
Geschieht diese über "zentrale" Schreib und Lesefunktionen.
Die Daten liegen im Verbindungsobjekt, welches selbst einem Thread gehört. Dieses Objekt verschickt auch Daten an den Thread, dem es gehört. Lesender Zugriff wird unter den Threads nicht gemacht, aber von anderen Objekten der
GUI.
Ist vielleicht jetzt etwas klarer...