Einzelnen Beitrag anzeigen

Quo

Registriert seit: 18. Feb 2008
6 Beiträge
 
#7

Re: Thread pausieren lassen und aufwecken

  Alt 19. Feb 2008, 17:10
Zitat von Muetze1:
Ein paar Fragen zu deinem Code:

1. Warum definierst du den Constructor deines Threads als virtuell?
2. Warum setzt du FreeOnTerminate vor dem Inherited Aufruf im Constructor?
3. Warum deklarierst du eine virtual abstrakte Methode, wenn es keine Ableitung von dem Thread gibt?
4. Wieso greifst du unsynchronisiert auf die Form und deren Komponenten zu?
5. Warum verwendest du die globale Form1 Variable anstatt z.B. eine richtige Instanz dem Thread zu übergeben?
6. Wozu deklarierst du ein Sender: TObject in deinem Thread?
7. Warum benutzt du globale Variablen in dem Thread?
8. Warum vergleichst du eine boolsche Variable auf explizit auf true?
9. Warum legst du den Thread suspended an um ihn dann sofort loslaufen zu lassen?

Das Beispiel, was ich hier reingepostet habe, war eigentlich ein testprogramm,
ich versuchte an einem einfacheren Beispiel zu verstehen, wie das ganze funktioniert.
Aber nach eueren Antworten sehe ich, dass die sache mit der Checkbox ein totales blödsinn von mir war.


In wirklichkeit geht es um ein gerät, das mittels serielle schnittstelle mit meinem programm verbundet ist. An das gerät sende ich in einer unendlichen schleife ein Kommando, was sein Status abfrägt und ein Kommando , was die messdaten am display anfordert.
Dieser Schleife ist in einem TTread verkapselt. Das gerät hat zwei Status-Modi...
Wenn ich Status-1 abfange, will ich aus der schleife raus, etwas machen, z.B andere Kommandos an gerät senden und von ihm daten empfangen. Wenn diese Porcedure fertig ist, will ich dass die Schleife die Status abfrägt, weiter läuft.

Wozu das ganze..so kann ich z.B Tasten-Drück am gerät abfangen und gleichzeitig aktuelle Display -Werte in meinem porgramm zu sehen bekommen.

ich habe das ganze bis jetzt ohne suspend ....mit einer StopVariable von typ boolean erledigt

es läuft aber irgendwie unsicher...manchmal wenn ich auf dem Form StopTaste oder StartTaste klicke
springt der Fokus sofort auf die andere TAste dann wieder zurück...

Was ich wollte, dass procedure TMyThreads.Execute sich von alleine schlafen legt und wenn der Code in proceduren
Form1.StartTasteClick(Sender) und Form1.StopTasteClick(Sender) bis zur Ende durgelaufen ist..dann weiter läuft.

Delphi-Quellcode:
procedure TMyThreads.Execute;
var

  Label 10,20,30;
begin

Form1.Edit11.Text:='Ende';

while(not Terminated)do

begin

10:Application.ProcessMessages;

 If StopVariable=true then
  begin
    CP.RTS(1);
    CP.SENDSTRING('sta,g'+chr(13)+chr(10));
    status:=cp.READSTRING();
  
    If trim(Status)='E 01then goto 10;
    If trim(Status)='then goto 10;
    Form1.Edit6.Text:='begin';
    Sleep(100);

   
    If (trim(Status)='04') and (StopJa=true) then
        begin
          Form1.StopTasteClick(Sender);

        end;

      If (trim(Status)='00') and (StopJa=true) then
          begin
          Form1.StopTasteClick(Sender);

          end;

    If (trim(Status)='02')and (StartJa=true) then
            begin
       
                Form1.StartTasteClick(Sender);
            end;
   /// Die letzten aktuellen Messwerten bekommen

20: CP.SENDSTRING('dis,g'+chr(13)+chr(10));

    Distanz:=cp.READSTRING();
    Distanz:=trim(Distanz);
If (length(Distanz)<11) or (length(Distanz)>11) then goto 20;

    Sleep(50);

    Test:='okkkkkkkkkkkkkk';

30: CP.SENDSTRING('kmh,g'+chr(13)+chr(10));
    Speed:=cp.READSTRING();
    Speed:=trim(Speed);
 If (length(Speed)<3) and (length(Speed)>5) then goto 30;


    Form1.Edit6.Text:='untennnnnnnnnnn';

    ///*
   
      end ;
    Synchronize(Go);

    end;

end;
  Mit Zitat antworten Zitat