Einzelnen Beitrag anzeigen

Innos

Registriert seit: 5. Jun 2007
142 Beiträge
 
#1

multithreading funktioniert nicht

  Alt 12. Jun 2007, 01:03
Hiii^^

habe ein Programm erstellt, dass bestimmte Pixel solange abfragt, bis eine boolsche bedingung true is also ca. so:

Delphi-Quellcode:
var bool:Boolean;
begin
repeat ..... //Die Pixel sind Tcolor und werden hier immer wieder abgefragt
...
bool:=(Pixel1 = Pixel2) and (Pixel3 = Pixel 4);
until (bool);
wenn ich das starte funktioniert auch alles! nur das programm is während der repeat-schleife nicht ansprechbar... da es aba mehrere procedures durchführen soll is das schlecht!

habe mir gedacht ein Thread würde helfen: hab mich schlau gemacht und thread erstellt... thread funktioniert auch soweit nur bleibt der Hauptthread (VCL) und allgemein das ganze Programm wieder während der repeat-schleife stehn...
funktioniert also der wechsel zwischen den threads nicht oder liegt ein Deadlock vor? synkronisiert hab ich bisher nix^^ habs aba scho oft ausprobiert (ohne erfolg)...

hier mein Thread: alles aus einem Thread-Tutorial http://www.dev-center.de/index.php?c...multithreading

Delphi-Quellcode:
 type
  TBinFertig = procedure(const Content: String) of object;
  TMyOwnThread = class(TThread)
  protected
    MediaPlayer1: TMediaPlayer;
    CB1: TCheckBox;
    CB2: TCheckBox;
    CB3: TCheckBox;
    CB4: TCheckBox;
    procedure Execute; override;
  private
    FBinFertig: TBinFertig;
    procedure SyncBinFertig;

  public
    property BinFertig: TBinFertig read FBinFertig write FBinFertig;
  end;

...
var
  MyOwnThread: TMyOwnThread ;

implementation
{$R *.dfm}

procedure TMyOwnThread.SyncBinFertig; //weiß damit nix anzufangen, da keine andere porcedure auf zB meine
                                         //Checkbox im Form1 (CB1) zugreift
begin

end;

procedure TMyOwnThread.Execute;

begin
  try

  bool:=false;
      lDC:= GetDC(0);
      if lDC> 0 then
     repeat
        Pixel[1]:= GetPixel(lDC, 554, 138); // hier frag ich einfach die Pixelfarbe von einem Array of TColor ab
       
       if Form1.CB1.Checked=true then // geht auch... also diese Checkbox zu checken 0o
        bool:=((bool) or x);

        if Form1.CB2.Checked=true then
        bool:=((bool) or y);

        if Form1.CB3.Checked=true then
        bool:=((bool) or z);

        if Form1.CB4.Checked=true then
        bool:=((bool) or a);
                                
          until bool; //an der endlosschleife bleibt alles hängen es soll aba nur dieser Thread arbeiten NICHT VCL

Form1.MediaPlayer1.Play

  except
    on e: exception do begin
      showmessage('blaa');
    end;
  end;
end;

procedure TSilkroadOnlineTool.Button5Click(Sender: TObject);
var Thread: TMyOwnThread;
begin
 Thread := TMyOwnThread.Create(True);
 Thread.Resume;
  Thread.Suspend;
  Thread.Terminate;
  Thread.Execute;
end;
end.
also habe heute zum ersten ma Thread in diesem zusammenhang gehört!! und hab deswegen kein plan warum es nich klappt ohne, dass der VCL stehn bleibt... neue exe is ne möglichkeit müsste aba dann variablen versenden etc und ich hätte 2 exe-dateien

also HELFT mir plz vielen Dank im voraus
  Mit Zitat antworten Zitat