Einzelnen Beitrag anzeigen

Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: TThread mit Queue und Events

  Alt 26. Mai 2025, 15:04
Oje...

Rule 1 - ein Thread hat kein Sleep!

Auch der Zugriff auf Count muss gelocked werden.

Sodo Code.

Thread:

Delphi-Quellcode:
While not Terminated do
  begin
    if Queue.Count = 0 then
      E_Event.WaitFor(INFINITE);

    if not terminated then
      begin
        // DeQueue
      end;
  end;
Queue:

Delphi-Quellcode:
Procedure Enqueue(aData : TData);
begin
  TMonitor.Enter;
  try
    fQueue.Add(aData);
  finally
    TMonitor.Leave;
  end;

  E_Event.SetEvent;
end;
Den E_Event des Threads wird and die Queue übergeben.

Nicht vergessen:

Delphi-Quellcode:
procedure TMyThread.Terminate;
begin
  inherited Terminate;

  E_Event.SetEvent;
end;
Hier nochmal den Link zu meiner CodeRage 2020 Session zum Thema Threads & Queues!

Mavarik

Geändert von Mavarik (26. Mai 2025 um 17:02 Uhr)
  Mit Zitat antworten Zitat