Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.183 Beiträge
 
Delphi 12 Athens
 
#9

AW: TThread.Queue landet nicht in der Queue

  Alt 19. Feb 2014, 17:47
Da ist es noch nie zu einer Endlosschleife gekommen ... ich wüsste jetzt auch nicht, wie es dazu kommen sollte.
OK, ich könnte mir eventuell denken, wie es dazu kommen könnte, aber das liegt halt an dem "falschen" Verhalten. (würde nicht passieren, wenn es "richtig" funktionieren würde )


Es gibt auch noch eine ganz billige Methode ohne Thread. Dabei wird der Code am Ende der Methode/Prozedur ausgeführt:
Ist noch zu früh ... erstmal muß der ganze DevExpress- und VCL-Rotz "hinter" dem END auch noch ausgeführt werden, weil es sonst knallt.

Sieht bei mir praktisch so aus.
Heißt nur deshalb nicht .Queue, damit der Compiler meckert, wenn man vergessen hat die Unit mit dem Helper einzubinden.
Delphi-Quellcode:
type
  TThreadHelper = class helper for TThread
  public
    {$REGION 'Documentation'}
    ///   <summary>
    ///    BUGFIX: Da TThread.Queue vom Hauptthread aus nicht in der Queue landet, sondern sofort ausgeführt wird.
    ///   </summary>
    {$ENDREGION}
    class procedure Queue_Bugfix(AThread: TThread; AThreadProc: TThreadProcedure); overload; static;
  end;

class procedure TThreadHelper.Queue_Bugfix(AThread: TThread; AThreadProc: TThreadProcedure);
begin
  if (MainThreadID = CurrentThread.ThreadID) and not Assigned(AThread) then begin
    // wenn im Hauptthread aufgerufen, dann an Thread übergeben
    // die **** führen das sonst sofort aus, anstatt es an die Queue zu übergeben
    CreateAnonymousThread(procedure
      begin
        try
          Queue(AThread, AThreadProc);
        except
          on E: Exception do
            ShowException(E, nil);
        end;
      end).Start;
  end else
    Queue(AThread, AThreadProc);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Feb 2014 um 17:49 Uhr) Grund: Das Wort zensiert
  Mit Zitat antworten Zitat