Einzelnen Beitrag anzeigen

IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
80 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Ein Versuch mit Omnithreadlibrary

  Alt 18. Sep 2020, 20:34
Zitat:
DU mußt also den Zugriff darauf irgendwie synchronisieren, z.B. mit einer CriticalSection oder passenden threadsicheren Komponenten ala TThreadList.
Ja, das stimmt. Den Code habe ich aber aus einem Beispiel von OmniThreadLibrary abgeleitet. Test_46.
Dort ist es auch so deklariert. Ich habe eine interne Schleife zusätzlich eingebaut und paar Sachen die für mich relevant sind dazu geschrieben.
Die Übergabe an den Hauptthread wird dort aber genau so angegeben. Darum frage ich die Profis was Sache ist.
Bin etwas durcheinander. Ich kenne es eigentlich auch so, dass man den Thread synchronisiert und nicht direkt anspricht.
Hier möchte ich noch etwas hinzufügen.
Ich kann mehr oder weniger mit Threads umgehen,bis jetzt habe ich die Class von Delphi-Praxis benutzt. Hat so weit alles gut geklappt.
Mir geht es um das Lernen. OmniThreadLibrary soll wohl sehr gut sein, deshalb versuche ich ein wenig zu testen.
Das ist das Original aus der Hilfe von OmniThreadLibrary
Delphi-Quellcode:
uses
  OtlTaskControl,
  OtlParallel;

{$R *.dfm}

procedure TfrmDemoParallelAsync.btnAsyncClick(Sender: TObject);
begin
  btnAsync.Enabled := false;

  Parallel.Async(
    procedure
    begin
      // executed in background thread
      Sleep(500);
      MessageBeep($FFFFFFFF);
    end,
    Parallel.TaskConfig.OnTerminated(
      procedure (const task: IOmniTaskControl)
      begin
        // executed in main thread
        btnAsync.Enabled := true;
      end
    )
  );
end;

Ok, ich denke hier ist einiges falsch.
Delphi-Quellcode:
                            Status := Liste.Strings[0];
                            Liste.Delete(0);
                            Memo1.Lines.Add(Status);
Meine Frage dazu.
Die ersten zwei Zeilen. Kann ich so auf die Liste zugreifen?
Ich denke, dass die dritte Zeile nun irgendwie synchronisiert werden muss.
Oder sind alle 3 Zeilen in der Form nicht akzeptabel?
Die Threads greifen nämlich auf die globale Liste zu. Darf es so bleiben?

PS: Die Hilfe bei http://docwiki.embarcadero.com ist vorsichtig ausgedrückt sehr mager. Ein Anfänger wird garantiert nie eine Thread basierte Anwendung danach schreiben können.

Geändert von IMPEGA (18. Sep 2020 um 20:44 Uhr)
  Mit Zitat antworten Zitat