Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Auf Thread warten ohne Programm zu blockieren

  Alt 29. Sep 2009, 14:31
Also ich hab erstmal folgendes gemacht, wobei ich mir schon selber fast sicher bin, dass dies NICHT wirklich macht, was ich möchte.

Delphi-Quellcode:
case (FiComport > 0) of
        true: begin
                //Quellcode
              end;
        false: begin
                  if ChangedComportList.Count > 0 then
                    begin
                      for i := 0 to ChangedComportList.Count - 1 do
                        begin
                          if strtoint(ChangedComportList[i]) > 0 then
                            begin
                              MMC_COM_open(strtoint(ChangedComportList[i]),Bautrate);
                              FConnectionTest := TConnectionThread.create(strtoint(ChangedComportList[i]));
                              FConnectionTest.OnConnected := SetComport;
                              FConnectionTest.OnTimeOut := TimeOut;
                              //FConnectionTest.OnConnected := Form2.TischConnection;
                              FConnectionTest.WaitFor; // <-- Hier bin ich mir nicht wirklich sicher, ob dies das Programm dazu veranlasst zu warten, bis der Thread beendet ist.
                              if FiComport > 0 then
                                begin
                                  result := true;
                                  Break;
                                end
                              else MMC_close;
                            end;
                        end;

                    end;
                end;

// Hier auch nochmal die geänderte Execute-Funktion des Threads
procedure TConnectionThread.Execute;
var bConnected: boolean;
    c1, c2, i: integer;
begin
  bConnected := false;
  c1 := GetTickcount;
  repeat
    for i := 1 to 2 do
      begin
        MMC_setDevice(i);
        if MST_moving = 1 then bConnected := true;
      end;
    if not bConnected then
      begin
        for i := 1 to 2 do
          begin
            MMC_setDevice(i);
            MMC_SendCommand('FE2');
          end;
      end;
    c2 := getTickCount;
  until (abs(c2-c1) > TestTime) or bConnected;
  if bConnected then doConnected;
  if abs(c2 - c1) > TestTime then doTimeOut;
end;
Tja vieleicht kann jemand der sich damit besser auskennt mal das anschauen und mir sagen, ob der Thread jetzt wirklich wartet. Ich selber werde versuchen dies mal zu testen.

BAMatze
2. Account Sero
  Mit Zitat antworten Zitat