Thema: Delphi Programm Stop

Einzelnen Beitrag anzeigen

DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: Programm Stop

  Alt 17. Feb 2021, 16:24
Am einfachsten ist es, das einfach in einen Thread auszulagern, damit der Mainthread wieder komplett frei wird.
Wenn du die o.g. Lösung einbaust, hängst du immer in Btn_GCode_Memo2_sendenClick fest.

Nur ein Gedankengang
Delphi-Quellcode:
// var ThreadyThreadObject: TThreadyThread;

procedure TForm2.FormCreate(Sender: TObject);
begin
 ReportMemoryLeaksOnShutdown := True; //

 ThreadyThreadObject := TThreadyThread.Create;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
 ThreadyThreadObject.Destroy;
end;
Delphi-Quellcode:
unit ThreadyThread;

interface

uses
 System.Classes;

type
 TThreadyThread = class(TThread)
 private
  {Private-Deklarationen}
 protected
  procedure Execute; override;
 end;

implementation

{ThreadyThread}

procedure TThreadyThread.Execute;
var
 count, i: integer;
 sl: TStringList;
begin
 if devOpen then
  begin
   sl := TStringList.Create;
   try
    TThread.Synchronize(nil,
     procedure
     begin
      sl.AddStrings(Form1.Memo2.Strings);
     end);;

    for i := 1 to sl.count do
     begin
      if Terminated do
       Break; // Stop hier

      Cmd.typ := CTRLcmd;
      Cmd.Cmd := $10; //
      if not SendCmd(Cmd) then // sende über usb
       begin
        MessageDlg('Sende Fehler.!', mtError, [mbOK], 0);
        Exit;
       end;

      TThread.Synchronize(nil,
       procedure
       begin
        SendeStr := Form1.Memo2.Lines[i - 1];
       end);

      // Jetzt Zeile senden
      xx := Buff_fuellen(SendeStr);
      USBsendData(@TxBuff, count);

      // auf ok warten
      repeat
       EmpfStr := '';
       USB_Read;
       sleep(5);
      until res > 0;
      RxBuff_Daten_To_String;

      TThread.Synchronize(nil,
       procedure
       begin
        Memo1.Lines.Add(EmpfStr);
       end);
     end;
   end;
  finally
   sl.Free;
  end;

end.
Am Rande: Form1.Memo2.Lines[i-1]; kann Form1.Memo2.Lines[i]; werden, wenn du in der Schleife bis count-1 zählst und bei 0 statt 1 anfängst.

Geändert von DieDolly (17. Feb 2021 um 16:33 Uhr)
  Mit Zitat antworten Zitat