Thema: Delphi Thread regiert nicht

Einzelnen Beitrag anzeigen

b01

Registriert seit: 3. Jul 2006
26 Beiträge
 
#1

Thread regiert nicht

  Alt 25. Aug 2006, 20:16
Hallo
ich bin grade dabei ein Program zu schreiben das während seiner Ausführung unter anderem auch einige FTP Transfers durchführt. Hierfür benutze ich die Indy ftpclient Komponente. Damit mein Program während des Transfers noch etwas anderes machen kann hab ich den "ftp-code" in einen extra Thread ausgelagert. Die execute methode des ftp threads sieht so aus:
Delphi-Quellcode:
begin
  while not Self.Terminated do
  begin
    case nextaction of
      1:connect;
      2:disconnect;
      3:get;
      4:exit;
    end;
  end;
end;
Die procedures connect, disconnect, get und exit machen jeweils das was in ihrem Namen steht, setzen das event fertig und legen den Thread mit suspend schlafen.
Im Hauptthread wird dann folgendermassen mit dem ftp Thread gearbeitet
Delphi-Quellcode:
   ...
  ftp:=Tftthread.Create(true);
  ftp.nextaction:=1; // Aktion 1
  ftp.Resume;
  // do something
  while not ((fertig.WaitFor(150))= wrSignaled)do
  begin
    Application.ProcessMessages;
  end;
  fertig.resetevent;
  ...
  ftp.nextaction:=3; // Aktion 2
  ftp.Resume;
  // do something
  while not ((fertig.WaitFor(150))= wrSignaled)do
  begin
    Application.ProcessMessages;
  end;
  fertig.resetevent;
  ...
Das Problem ist nun das wenn Aktion 2 unmittelbar auf Aktion 1 folgt der Hauptthread endlos in der while Schleife wartet. Auch ein Brakepoint in der get procedure des ftp Threads wird nie angespungen. Setze ich aber in der connect procedure einen Brakepoint und lasse das Programm sofort weiterlaufen funktioniert alles. Die Anzeichen deuten auf ein timing Problem, nur kann ich leider keins erkennen.
  Mit Zitat antworten Zitat