Hallo!
Ich habe folgendes (merkwürdige) Problem:
In einem Thread werden Werte an andere Threads vergeben. Diese Threads werden vom Mainthread ausgeführt. Der Thread, der Werte an die anderen Threads senden soll, hat eine Liste von Objekten, welche eine Referenz zu den anderen Threads halten.
Wenn ich also dieses Signal an alle Threads in der Liste senden will, müsste ich prinzipiell sowas machen:
Delphi-Quellcode:
procedure TMyThread.EmitSignal;
var i: Integer;
begin
for i:=0 to objlist.Count-1 do
objlist[i].OwnedThread.ReceiveSignal();
end;
Dabei ist zu beachten, dass die Objekte in der Liste dem Thread gehören, auf den mit "OwnedThread" zugegriffen wird.
So. Und jetzt soll die Funktion oben aber nicht so aufgerufen werden, sondern ordentlich mit dem Thread Synchronisiert werden.
Denkbar wäre sowas:
Delphi-Quellcode:
procedure TMyThread.EmitSignal();
begin
Synchronize(objlist[?].OwnedThread,@SyncSignal);
end;
procedure TMyThread.SyncSignal;
begin
objlist[?].OwnedThread.ReceiveSignal();
end;
Und hier sieht man das Problem: Wie hole ich den korrekten Thread aus der Liste, und synchronisiere die Funktionen richtig? Dummerweise akzeptiert TThread.Synchronize ja nur Methoden vom Typ TThreadMethod und keine lokalen.
Weiß jemand da eine gute Lösung für?