Thema: Delphi Mal wieder Threads

Einzelnen Beitrag anzeigen

DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#19

AW: Mal wieder Threads

  Alt 5. Nov 2011, 13:25
Da ich wirklich nicht alle posten kann, wäre einfach zu lang, habe ich mal die wichtigen sachen zusammen gestellt. Wenn ich was vergessen habe, dann beschimpft einfach

Delphi-Quellcode:
type
  TReadDataFrm = class(TForm)
    RzPanel1: TRzPanel;
    StatusBox: TRzGroupBox;
[SNIP]
  private
    { Private-Deklarationen }
    procedure RefreshRDObj(var Msg: TMessage); message Refresh_RDObj;
  public
    { Public-Deklarationen }
  end;

procedure TReadDataFrm.RefreshRDObj(var Msg: TMessage);
var
   i      :Integer;
begin
    i := Integer(Msg.lParam);
[SNIP]
    MyThread.InUse:=False;
end; {RefreshRDObj(var Msg: TMessage)}
Das hier ist dann im Thread der eigentliche aufruf. Er achtet noch auf InUse da es vorher ja mit Postmessage gemacht wurde.

Delphi-Quellcode:
      if AppRun=1 then begin
        AppRun:=0;
        if NOT MyThread.InUse then begin
          MyThread.i:=2;
          MyThread.InUse:=True;
          SendMessage(MyThread.WinHandle, Refresh_RDObj, 0, MyThread.i);
        end;
      end;
Apprun ist auch Global. Es wird alle 100ms auf 1 gesetzt, über einen normalen TTimer. Da grade dieses nicht mehrmals aufgerufen wird, ist das kein record-array.

Das teil sieht so aus.

Delphi-Quellcode:
type
  TMyThread = record
      InUse               :Boolean;
      RunType            :Integer;
    PathCount :Integer;
    FileCount :Integer;
    SizeCount :Int64;
      FileName         :String;
    WinHandle       :THandle;
[SNIP]
     AktDirVar :String;
     AktProgress :Integer;
      i                     :Integer;
      Str                  :String;
end;
Winhandle wird vor dem start des Thread gesetzt. Wie gesagt, das ist kein "eigener" Thread wie ich ihn im ersten post hier beschrieben habe, sondern ein TJvMTThread. Damit habe ich noch nie was gemacht. Alle meine progs liefen immer mit Thread wie im 1. post beschrieben. Vielleicht vergesse ich da was?!?

So, nun hab ich sooo lange gesucht und Copy&Pastet das ne Rote Box kam...

[Nachtrag]
Mit der Variante aus dem ersten post, habe ich ein prg gemacht was bis zu 200 threads zeitgleich laufen hat. Das klappt einwandfrei. Eventuell sollte ich vom TJvMTThread wieder weggehen und es so machen wie ich es gewohnt bin.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!

Geändert von DelTurbo ( 5. Nov 2011 um 13:30 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat