Ich gucke mir das mal an aber ich habe die Beiträge mit den vielen Denkanstößen so verstanden, dass es generell threadsichere Queues/Listen gibt, die man nutzen kann um mit Threads zu arbeiten? Gleichzeitig wird immer auf Events verwiesen um die Threads anzutriggern.
Aber irgendwie scheint es keine Beispiele dazu zu geben, wo man sich das konkret angucken und nutzen könnte. Zum aktuellen Zeitpunkt helfen die Denkanstöße leider nicht wirklich
Oh.
Wenn dir der standard reicht.
Alle Objekte von Delphi haben einen monitor. Damit kannst du den zugriff auf dieses Objekt threadsicher machen.
Das heist DU blockiert alle zugriffe auf das Objekt bis auf einen und alle threads warten in einer warte schlange und stehen so lange bis sie drann sind.
TMonitor leistet das selbe wie TCriticalsection...nur das der Monitor halt schon teil des Objekts ist, während TCriticalsection von dir in alle möglichen kontexte gesetzt werden kann.
Delphi-Quellcode:
TMonitor.enter(MessageQueue);
try
MessageQueue.add('einen text');
finally
TMonitor.exit(MessageQueue);
end;
Das macht den Zugriff auf MessageQueue wenn konsequent über all so angewendet threadsicher, durch blockieren der nebenläufigkeit im Tmonitor.enter!
Threads können pausiert und aktiviert werden über TEvent...es ist ein signal
Delphi-Quellcode:
var ZweiThreadsKennenMich := TEvent.create;
ZweiThreadsKennenMich.ResetEvent; //Event Nicht triggered
TTask.run(
Procedure
Begin
if ZweiThreadsKennenMich.Waitfor(60000) = wrSignaled then
PlaySound
else
begin
//zu lange gewartet
ZweiThreadsKennenMich.ResetEvent;
end
end
);
ZweiThreadsKennenMich.SetEvent; // triggered das event und Sound wird abgespielt.