Einzelnen Beitrag anzeigen

Florian_Meyer

Registriert seit: 15. Jul 2006
Ort: Rostock
37 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Thread stürzt aber, aber nur unter Win 2003, nicht unter

  Alt 8. Aug 2006, 09:34
Hallo Peter,

leider nützt mir diese Aussage auch nicht viel weiter, weil wir den Server gerade letzte Woche neu aufgesetzt haben. Und wirklich viele Programme sind auch nicht installiert.



Aber wie ich grad festgestellt hab, müsste ich den Titel hier nochmal ändern, weil ich habe soeben gemerkt, dass der Thread nicht nur unter Windows Server 2003, sondern auch unter Win XP abschmiert.
Zwar ist es so, dass der Thread aufm server nur einmal durchlaufen wird und danach abstürzt, aber beim XP-Rechner ist es genauso, bis auf, dass es dort erst nach ein paar Minuten so ist.

Ich bin echt am Verzweifeln...
Scheinbar stürzt dabei ab, wenn ich etwas mit einer Absolute DB machen will.

Achtung*g*: Hier kommt etwas sehr langer Code. Dies ist der gesamte Thread.
ich makiere mal die Stelle, an welcher der Thread abstürzt.

Delphi-Quellcode:
unit uThread2;

interface

uses Classes,Windows, SysUtils, Variants;

type
  TUpdateLocation = (ulDatabaseActive, ulDatabaseDeActive, ulTimestamp, ulMemo, ulTable3Active, ulTable3First, ulTable3DeActivate, UploadSchlangeTableDelete, UploadSchlangeTableNext);
  TUpdateLocations = set of TUpdateLocation;

  TThread2 = class(TThread)
  private
    UpdateString: string;
    UpdateLocations: TUpdateLocations;
    procedure MySynchronizeEx;
    procedure MySynchronize(astring: string; AUpdateLocation: TUpdateLocations);
  protected
    procedure Execute; override;
 end;

implementation

uses uMain, IdFTPCommon;

const
UnixStartDate: TDateTime = 25569.0;

function DateTimeToUnix(ConvDate: TDateTime): Longint;
begin
  Result := Round((ConvDate - UnixStartDate) * 86400);
end;

function UnixToDateTime(USec: Longint): TDateTime;
begin
  Result := (Usec / 86400) + UnixStartDate;
end;

procedure TThread2.Execute;
var
  iStart: Cardinal;
  iEnde: Cardinal;
  uploadid, port: integer;
  server,user,password,qpath,spath: string;
begin
  repeat
    iStart := getTickCount;
    try
      if not MainForm.ABSDatabase1.Connected then
      begin
        MySynchronize('',[ulDatabaseActive]);
      end;
      if not MainForm.UploadSchlangeTable2.Active then
      begin
        MySynchronize('',[ulTable3Active,ulTable3First]);
      end;
      while not MainForm.UploadSchlangeTable2.Eof do
      begin
        uploadid := MainForm.UploadSchlangeTable2.FieldByName('iID').AsInteger;
        server := MainForm.UploadSchlangeTable2.Lookup('iID',uploadid,'sServer');
        port := MainForm.UploadSchlangeTable2.Lookup('iID',uploadid,'iPort');
        user := MainForm.UploadSchlangeTable2.Lookup('iID',uploadid,'sUser');
        password := MainForm.UploadSchlangeTable2.Lookup('iID',uploadid,'sPassword');
        spath := MainForm.UploadSchlangeTable2.Lookup('iID',uploadid,'sSpath');
        qpath := MainForm.UploadSchlangeTable2.Lookup('iID',uploadid,'sQPath');
        // Beginne Upload-Prozess
        MySynchronize('--------------- starting upload '+inttostr(uploadid)+' on '+DateToStr (Date) + ' - ' + TimeToStr (Time)+' -----',[ulMemo]);
        MainForm.UploadFTP.Host := server;
        MainForm.UploadFTP.Port := port;
        MainForm.UploadFTP.Username := user;
        MainForm.UploadFTP.Password := password;
        MySynchronize('===== connecting to '+server+' =====',[ulMemo]);
        try
          MainForm.UploadFTP.Connect;
          MySynchronize('===== connection established =====',[ulMemo]);
        except
          MySynchronize('===== connection failed =====',[ulMemo]);
        end;
        if MainForm.UploadFTP.Connected then
        begin
          MainForm.UploadFTP.ChangeDir(spath);
          MySynchronize('===== uploading =====',[ulMemo]);
          try
            MainForm.UploadFTP.Put(qpath,ExtractFileName(qpath));
            MySynchronize('===== upload successful =====',[ulMemo]);
          except
            MySynchronize('===== upload failed =====',[ulMemo]);
          end;
          MainForm.UploadFTP.Disconnect;
          MySynchronize('===== connection closed =====',[ulMemo]);
        end;
        MainForm.UploadSchlangeTable2.Delete;
manchmal stürzt er hier ab
        MainForm.UploadSchlangeTable2.Next; manchmal auch hier
Delphi-Quellcode:
      end;
    finally
      if MainForm.ABSDatabase1.Connected then
      begin
        MySynchronize('',[ulDatabaseDeActive]);
      end;
und manchmal auch hier
Delphi-Quellcode:
    end;
    iEnde := getTickCount;
    sleep(10000-(iEnde-iStart));
  until (terminated);
end;

procedure TThread2.MySynchronize(Astring: string;
  AUpdateLocation: TUpdateLocations);
begin
  UpdateLocations := AUpdateLocation;
  UpdateString := AString;
  Synchronize(MySynchronizeEx);
end;

procedure TThread2.MySynchronizeEx;
var
  AUpdateLocation: TUpdateLocation;
begin
  for AUpdateLocation in UpdateLocations do
  begin
    case AUpdateLocation of
      ulDatabaseActive: MainForm.ABSDatabase1.Connected := true;
      ulDatabaseDeActive: MainForm.ABSDatabase1.Connected := false;
      ulMemo: MainForm.mNetwork.Lines.Add(UpdateSTring);
      ulTable3Active: MainForm.UploadSchlangeTable2.Active := true;
      ulTable3First: MainForm.UploadSchlangeTable2.First;
      ulTimestamp: MainForm.eUnixTime.Text := Updatestring;
      ulTable3DeActivate: MainForm.UploadSchlangeTable2.Active := false;
      UploadSchlangeTableDelete: MainForm.UploadSchlangeTable2.Delete;
      UploadSchlangeTableNext: MainForm.UploadSchlangeTable2.Next;
    end;
  end;
end;

end.
  Mit Zitat antworten Zitat