Einzelnen Beitrag anzeigen

DelphiUser123

Registriert seit: 23. Feb 2013
39 Beiträge
 
#1

Paralleler Thread funktioniert nicht

  Alt 1. Okt 2024, 14:57
Hallo liebes Forum. Einen Code den ich schon einmal vor kurzem hier gepostet habe, habe ich übertragen von einer Timer Procedure in eine Thread Procedure. Ist der USB Stick mit der Datei KEYxyz.txt vorhanden, bleibt das Programm wunschgemäß geöffnet und führt ein mal Laden() aus. Steckt man den USB Stick aus, soll das Programm sofort schließen. Hier liegt das Problem: Anstelle zu schließen, erscheint ein flackernder Bildschirm, man sieht an den Driver und File Komponenten, dass die Laufwerkskontrolle kontinuierlich fortgesetzt wird. Er kommt nicht rein in den "Showmesage('JA')" Bereich.

Ich gebe zu, die Art und Weise der Programmierung ist wahrscheinlich etwas "Oldschool", es soll in erster Linie funktionieren, dass das Programm ohne Vorwarnung schließt ist absichtlich so gewollt. Ich bitte um eine Fokussierung auf mein Problem und bitte keine Wiederholungen von den Posts von vor Kurzem. Vielen Dank für Antworten.

Delphi-Quellcode:
procedure TMyThread.Execute;
var j,i:integer; LookFor: string; f: File; pausieren: boolean;
begin
while not(closing) do begin

     Sleep(1000);
     
try //T
         pausieren:=false;
         j:=0;
   
    while ((j < (Form29.DriveCombobox1.GetCount)) and (not(pausieren))) do
    
    begin //B

      Form29.DriveCombobox1.itemindex:=j;

      Form29.FileListBox1.Directory:=Form29.DriveCombobox1.text[1] + ':/';

      LookFor:='KEYxyz.txt';

      Form29.FileListBox1.Update;

     i:=0;
                                            
    while ((i < (Form29.FileListBox1.Count)) and (not(pausieren))) do
   
    begin //A

      if (Form29.FileListBox1.Items[i]= LookFor) then begin //Showmessage('gefunden');

            FileNom:= Form29.FileListBox1.Directory + LookFor;

                        if timerstarter then begin

                          Laden();
                          timerstarter:=false;
                        end;
                            
                            pausieren:=true;
                                Showmessage('in pausieren drin');

      end;
      Inc(i);

    end; //A
 
       if ((j=Form29.DriveCombobox1.GetCount-1) and (not(pausieren))) then begin Showmessage('JA'); closing:=true; Application.Terminate; end;
 
       Inc(j);

    end; //B
    except //T
     on EInOutError do begin
//showmessage('Fehler mit dem Datenträger!');
     Application.Terminate;
    end;
end;
end;
end;
  Mit Zitat antworten Zitat