AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

dynamische Threads in while-Schleife

Ein Thema von Mayday171 · begonnen am 7. Jun 2006
Antwort Antwort
Mayday171

Registriert seit: 19. Apr 2006
40 Beiträge
 
#1

dynamische Threads in while-Schleife

  Alt 7. Jun 2006, 07:10
Hallo,

Kann mir einer sagen wie ich Threads in einer while-Schleife erstelle? Lese nacheinander Dateien in einen Ordner aus und das Programm ist sehr langsam. Deswegen wollte ich es mal mit Threads probieren. Wie binde ich das ein und wie setze ich es um? HZab davon keine Ahnung...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    Rec:TSearchRec;
    m:integer;
    feld: array of string;
 begin
 setlength(feld,strtoint(getconfig('Dateien','Anzahl')));
//////////////////////////////////////////////////////////////////////////
///
/// FIND FILES FUNTION
///
//////////////////////////////////////////////////////////////////////////
   i:=0;

   while getconfig('checkboxen',inttostr(i))<>'errordo
    begin
    m:=0;
      if findfirst(getconfig('Allgemein','root')+getconfig('checkboxen',inttostr(i))+'\*.txt',faAnyFile,Rec)<>0 then
       begin
         i:=i+1;
         continue;
       end;
        // Übergabe der Namen
       if (StrCharCount(rec.name,'_')>strtoint(getconfig('Dateien','unique'))-1) and (pos('_',rec.Name)<>1) then
        begin
          listbox1.items.add(getconfig('checkboxen',inttostr(i))+'\'+rec.name);


          query.SQL.Text:='INSERT INTO '+getconfig('SQL','tabelle')+' (';
          query2.SQL.Text:='SELECT * FROM '+getconfig('SQL','tabelle')+' WHERE ';
          while m+1<=strtoint(getconfig('Dateien','Anzahl')) do
           begin
            delete(rec.Name,pos('.',rec.Name),4);
            if m+1=strtoint(getconfig('Dateien','Anzahl')) then
              feld[m]:=rec.Name
            else
             begin
               feld[m]:=cutrev(rec.Name,'_');
               rec.Name:=cut(rec.Name,'_');
             end;

             query.SQL.Text:=query.SQL.Text+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+',';
             query2.SQL.Text:=query2.SQL.Text+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+'=:'+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+' AND ';
             query2.ParamByName(cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')).Value:=feld[m];
             m:=m+1;

          end;
           query.SQL.Text:=query.SQL.Text+'zeit,ordner) VALUES (';

             m:=0;
             while m+1<=strtoint(getconfig('Dateien','Anzahl')) do
              begin
                query.SQL.Text:=query.SQL.Text+':'+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+','; // PARAMETERNAMEN werden geschrieben
                query.ParamByName(cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')).Value:=feld[m];
                m:=m+1;

              end;

              query.SQL.Text:=query.SQL.Text+':zeit,:ordner)';
              query2.SQL.Text:=query2.SQL.Text+'ordner=:ordner';
              query.ParamByName('zeit').AsSQLTimeStamp:=DateTimeToSqlTimeStamp(FileDateToDateTime(rec.Time));
              query.Parambyname('ordner').Value:=getconfig('checkboxen',inttostr(i));
              query2.ParamByName('ordner').Value:=getconfig('checkboxen',inttostr(i));
            //showmessage(query2.SQL.Text);

           query2.Open;

           //showmessage(inttostr(query2.RecordCount));
           if query2.RecordCount=0 then
            begin
              //showmessage('in Schleife');
              //query.ExecSQL;
              query.SQL.Clear;
            end;
            query2.Close;

        end;

////////////////////////////////////////////////////////////

      while findnext(rec)=0 do
        begin
           m:=0;
           /// Übergabe der Namen
          if (StrCharCount(rec.name,'_')>=strtoint(getconfig('Dateien','unique'))-1) and (pos('_',rec.Name)<>1) then
            begin
              listbox1.items.add(getconfig('checkboxen',inttostr(i))+'\'+rec.name);

            query.SQL.Text:='INSERT INTO '+getconfig('SQL','tabelle')+' (';
            query2.SQL.Text:='SELECT * FROM '+getconfig('SQL','tabelle')+' WHERE ';

            while m+1<=strtoint(getconfig('Dateien','Anzahl')) do //Schleife solange Anzahl in Ini
             begin
               delete(rec.Name,pos('.',rec.Name),4); /// löscht .txt
               if m+1=strtoint(getconfig('Dateien','Anzahl')) then // wenn Felder Anzahl das letzte (also der Name) dann kopieren
                 feld[m]:=rec.Name
               else
                begin
                  feld[m]:=cutrev(rec.Name,'_'); /// Dateinamen werden geschnitten und
                  rec.Name:=cut(rec.Name,'_'); /// Feld zugewiesen
                end;

               query.SQL.Text:=query.SQL.Text+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+',';
               query2.SQL.Text:=query2.SQL.Text+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+'=:'+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+' AND ';
               query2.ParamByName(cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')).Value:=feld[m];
               m:=m+1;

             end;
             query.SQL.Text:=query.SQL.Text+'zeit,ordner) VALUES (';

             m:=0;
             while m+1<=strtoint(getconfig('Dateien','Anzahl')) do
              begin
                query.SQL.Text:=query.SQL.Text+':'+cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')+','; // PARAMETERNAMEN werden geschrieben
                query.ParamByName(cut(getconfig('Dateien','Feld'+inttostr(m+1)),':')).Value:=feld[m];
                m:=m+1;
              end;
              query.SQL.Text:=query.SQL.Text+':zeit,:ordner)';
              query2.SQL.Text:=query2.SQL.Text+'ordner=:ordner';
              query.ParamByName('zeit').AsSQLTimeStamp:=DateTimeToSqlTimeStamp(FileDateToDateTime(rec.Time));
              query.Parambyname('ordner').Value:=getconfig('checkboxen',inttostr(i));
              query2.ParamByName('ordner').Value:=getconfig('checkboxen',inttostr(i));

             //showmessage(query2.SQL.Text);

             query2.Open;
             //showmessage(inttostr(query2.RecordCount));
             if query2.RecordCount=0 then
              begin
                //showmessage('in Schleife');
                //query.ExecSQL;
                query.SQL.Clear;
              end;
              query2.Close;
           end;

          ////////////////////////

        end;
      i:=i+1;
      findclose(rec);
    end;

//////////////////////////////////////////////////////////////////////////
///
/// FIND FILES FUNTION ENDE
///
//////////////////////////////////////////////////////////////////////////
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz