Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
670 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Multithreading führt doppel aus?

  Alt 29. Mai 2019, 19:47
Ich bin relativ neu in Delphi und probiere mich grade an multi threading.

Wieso gibt der Folgende code 2 mal "Test" in der Konsole aus?
Tut er nicht, jedenfalls in meiner etwas getuneten Testversion:

Delphi-Quellcode:
program RioTestframe_console;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes;

type
  TSelfThread = class(TThread)
    procedure Execute; override;
end;

procedure TSelfThread.Execute;
begin
  Writeln('Test');
end;


procedure runTest;
var
  SelfThread: TSelfThread;

begin
  SelfThread := TSelfThread.Create(false);
  try
    selfthread.WaitFor;
  finally
    selfthread.free
  end;
end;


begin
  try
    RunTest;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  WriteLn(SLinebreak, 'Hit return to exit');
  ReadLn;
end.
Vermutlich hast Du in deiner Version ein Problem, da Write/Writeln nicht threadsafe ist. Die Ausgabe ist gepuffert und da gibt es wohl in deinem Fall einen konflikt.
Peter Below
  Mit Zitat antworten Zitat