AGB  ·  Datenschutz  ·  Impressum  







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

Timer stoppen

Ein Thema von DelphiManiac · begonnen am 22. Feb 2008 · letzter Beitrag vom 29. Feb 2008
Antwort Antwort
Seite 3 von 5     123 45      
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#21

Re: Timer stoppen

  Alt 22. Feb 2008, 17:58
Zitat von DeddyH:
Ja, ab 40 lässt die Reaktion rapide nach, ich kenne das
[OT]Das zu sagen, und in der selben Minute noch zu antworten ist ein wenig zynisch [/OT]
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#22

Re: Timer stoppen

  Alt 22. Feb 2008, 18:05
[OT] Oh shit, ich bin als Zyniker entlarvt [/OT]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#23

Re: Timer stoppen

  Alt 22. Feb 2008, 18:17
Zitat von DeddyH:
[OT] Oh shit, ich bin als Zyniker entlarvt [/OT]
[OT]Ich war mir da bis jetzt nicht so sicher. Hey komm, ich bin relativ neu hier!
Löschen die Moderatoren den Unfug hier eigentlich wieder? Besser fänd ich das schon. Das is nix fürs Archiv [/OT]
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#24

Re: Timer stoppen

  Alt 22. Feb 2008, 18:42
gelöscht wirds nicht (auch sowas muss ab und zu sein sonst fehlt das persönliche und wir können uns gleich ein trockenes Lehrbuch nehmen) aber jetzt kommt ein dezenter Hinweis:
Lasst uns zum Thema zurück kommen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#25

Re: Timer stoppen

  Alt 27. Feb 2008, 16:24
Hi,

ja stimmt, der Timer (so einfach er eigentlich ist) kann einem mit Application.ProcessMessages schlimme Probleme
bereiten.

Ich habe es jetzt so gelöst, dass er sich nicht selbst überholen kann:
Delphi-Quellcode:
TTimer(Sender).Enabled:=false;
..
..
..
..
..
TTimer(Sender).Enabled:=TimerSollLaufen;

Wenn ich jetzt extern das Flag TimerSollLaufen auf False setze, dann wird der Timer nach Ablauf der OnTimer Prozedur
beendet.

Meine Frage ist nun, wie kann ich mir sicher sein, dass er wirklich beendet ist?! Ich habe den Timer.Tag dazu genutzt,
mir anzuzeigen, ob er noch aktiv ist (1) oder beendet ist (0),
doch wenn ich auf dieses Flag polle, dann bleibt der Timer einfach stehen!
Gibt es dafür eine Erkärung?!

Delphi-Quellcode:
    while tmrAblauf.Tag >0 do
    begin
      Application.ProcessMessages;
    end;
    // Hier kommt er dann nie hin
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#26

Re: Timer stoppen

  Alt 29. Feb 2008, 11:53
*push*
  Mit Zitat antworten Zitat
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#27

Re: Timer stoppen

  Alt 29. Feb 2008, 12:58
Wo setzt Du das Tag? Was machst Du sonst noch im Timer-Event? Wo steht die while-Schleife? Ohne den Kontext, in dem die Codeschnipsel stehen, kann ich mir keinen Kopp um Dein Problem machen. Mehr Code! Ich brauch mehr Code!
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#28

Re: Timer stoppen

  Alt 29. Feb 2008, 13:14
Die vielen Application.ProcessMessages bringen den ganzen Message-Ablauf total durcheinander. In der selben Zeit, in der du versucht hast, dieses Problem zu richten, hättest du schon einen ganzen Thread samt Synchronisation schreiben können.

Zitat von bluesbear:
Mehr Code! Ich brauch mehr Code!
*sing* "Gimme Code Johanna, Code Johanna! Gimme Code Johanne! Before the morning comes."
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#29

Re: Timer stoppen

  Alt 29. Feb 2008, 14:08
Ok du willst Code du kriegst Code

Delphi-Quellcode:
procedure TMainGUI.tmrAblaufTimer(Sender: TObject);
var
  active:Boolean;
  time1,time2:Cardinal;
  Failure:Boolean;
begin
  TTimer(Sender).Enabled:=false;
  active:=False;
  if TimerIsActive then exit;
try
  if not Assigned(aCS200) then Exit;
  TimerIsActive:=True;
  if TimeOut then exit;
  time1:=GetTickCount;
  tmrAblauf.Tag:= tmrAblauf.Tag+1;
  lblRequestVal.Caption:=IntToStr(tmrAblauf.Tag);
  Failure:=False;
  case tmrAblauf.Tag of
    1 : begin
          if (aCS200.Get_TempIntern(TempIntern))=0 then
          begin
            pbFortschritt.Position:=7;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    2 : begin
         if (aCS200.Get_TempExtern(TempExtern))=0 then
         begin
           pbFortschritt.Position:=14;
         end
         else
         begin
           Failure:=True;
         end;
        end;
    3 : begin
          if (aCS200.Get_StoerungsFlags(stoerungsflags))=0 then
          begin
            pbFortschritt.Position:=21;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    4 : begin
          if (aCS200.Get_SollWertFanIntern(SollWertFanIntern))=0 then
          begin
            pbFortschritt.Position:=28;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    5 : begin
          if (aCS200.Get_FanInternSpeed_1(fan1InternSpeed))=0 then
          begin
            pbFortschritt.Position:=35;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    6 : begin
          if (aCS200.Get_Fan1InternPuls(fan1InternPuls))=0 then
          begin
            pbFortschritt.Position:=42;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    7 : begin
          if (aCS200.Get_FanInternSpeed_2(fan2InternSpeed))=0 then
          begin
            pbFortschritt.Position:=49;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    8 : begin
          if (aCS200.Get_Fan2InternPuls(fan2InternPuls))=0 then
          begin
            pbFortschritt.Position:=56;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    9 : begin
          if (aCS200.Get_SollWertFanExtern(SollWertFanExtern))=0 then
          begin
            pbFortschritt.Position:=63;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    10: begin
          if (aCS200.Get_FanExternSpeed_1(fan1ExternSpeed))=0 then
          begin
            pbFortschritt.Position:=70;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    11: begin
          if (aCS200.Get_FanExternSpeed_2(fan2ExternSpeed))=0 then
          begin
            pbFortschritt.Position:=77;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    12: begin
          if (aCS200.Get_Fan1ExternPuls(fan1ExternPuls))=0 then
          begin
            pbFortschritt.Position:=84;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    13: begin
          if (aCS200.Get_Fan2ExternPuls(fan2ExternPuls))=0 then
          begin
            pbFortschritt.Position:=91;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    14: begin
          if (aCS200.Get_StoerungsFlags(stoerungsflags))=0 then
          begin
          pbFortschritt.Position:=95;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    15: begin
          if (aCS200.Get_IOFlags(IOflags))=0 then
          begin
            pbFortschritt.Position:=98;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    16: begin
          if (aCS200.Get_StatusFlags(Statusflags))=0 then
          begin
            pbFortschritt.Position:=100;
          end
          else
          begin
            Failure:=True;
          end;
        end;
    100 +1:
        begin
          WriteDataToDevice(Self);

        end;
    200 +1:
        begin
          ReadDataFromDevice(Self);

        end
    else
    begin
     tmrAblauf.Tag := 0;
     pbFortschritt.Position:=0;
    end;
  end;
  if Failure then
  begin
    MessageDlg('Fehler beim Lesen der Daten aus dem Wärmetauscher',mtError,[mbOK],0);
    exit;
  end;

  if TimeOut then
  begin
    exit;
  end;
  if Assigned(aCS200) then
  begin
    if aCS200.FSCI.isConnected then
    begin
      if not( (Assigned( aCS200 ))) then Exit;
      lnAkuelleInnenTemp.Clear;
      lnAktuelleAussenTemp.Clear;
      if not(stoerungsflags[8]) then
      begin
        // zeichne Aktuelle Innentemp auf Graph "Innenkreis"
        lnAkuelleInnenTemp.AddXY(TempIntern,-20,'',clBlack);
        lnAkuelleInnenTemp.AddXY(TempIntern+0.1,120,'',clBlack);

        // zeichne Aktuelle Innentemp auf Graph "Aussenkreis"
        lnAktuelleAussenTemp.AddXY(TempIntern,-20,'',clBlack);
        lnAktuelleAussenTemp.AddXY(TempIntern+0.1,120,'',clBlack);
      end
      else
      begin
        TempIntern:=-40;
      end;
      lblTempInternVal.Caption:=IntToStr(TempIntern) + ' [°C]';
      if (Statusflags[7]) then
      begin
        // TempFühler Aussen ist wirklich vorhanden
        lblTempExternVal.Caption:=IntToStr(TempExtern) + ' [°C]';
      end
      else
      begin
        lblTempExternVal.Caption:=' --' + ' [°C]';
      end;
      lblSollWertFanInternVal.Caption:=IntToStr(SollWertFanIntern) + ' [%] ';
      lblFanSpeed1InternVal.Caption:=IntToStr(fan1InternSpeed)+ ' [rpm] ' +
      ' bei '+IntToStr(fan1InternPuls)+ ' [P/s]';
      lblFanSpeed2InternVal.Caption:=IntToStr(fan2InternSpeed)+ ' [rpm]'+
      ' bei '+IntToStr(fan2InternPuls)+ ' [P/s]';


      lblSollWertFanExternVal.Caption:=IntToStr(SollWertFanExtern) + ' [%] ';
      lblFanSpeed1ExternVal.Caption:=IntToStr(fan1ExternSpeed)+ ' [rpm] ' +
      ' bei '+IntToStr(fan1ExternPuls)+ ' [P/s]';
      lblFanSpeed2ExternVal.Caption:=IntToStr(fan2ExternSpeed)+ ' [rpm]'+
      ' bei '+IntToStr(fan2ExternPuls)+ ' [P/s]';
      if IOflags[6] then begin
        ledTuerkontakt.ColorOn:=clLime;
      end else
      begin
        ledTuerkontakt.ColorOn:=clGray;
      end;
      if IOflags[5] then begin
        ledEndSchalter1.ColorOn:=clLime;
      end else
      begin
        ledEndSchalter1.ColorOn:=clGray;
      end;
      if IOflags[4] then begin
        ledEndSchalter2.ColorOn:=clLime;
      end else
      begin
        ledEndSchalter2.ColorOn:=clGray;
      end;
      if IOflags[3] then begin
        ledInAlarm1.ColorOn:=clLime;
      end else
      begin
        ledInAlarm1.ColorOn:=clGray;
      end;
      if IOflags[2] then begin
        ledInAlarm2.ColorOn:=clLime;
      end else
      begin
        ledInAlarm2.ColorOn:=clGray;
      end;
      if IOflags[8] then begin
        ledAlarm1.ColorOn:=clRed;
      end else
      begin
        ledAlarm1.ColorOn:=clGray;
      end;
      if IOflags[9] then begin
        ledAlarm2.ColorOn:=clRed;
      end else
      begin
        ledAlarm2.ColorOn:=clGray;
      end;
      if IOflags[10] then begin
        ledAlarm3.ColorOn:=clRed;
      end else
      begin
        ledAlarm3.ColorOn:=clGray;
      end;
      if IOflags[11] then begin
        ledHeizung.ColorOn:=clLime;
      end else
      begin
        ledHeizung.ColorOn:=clGray;
      end;
      if IOflags[12] then begin
        ledSammelstoerung.ColorOn:=clLime;
      end else
      begin
        ledSammelstoerung.ColorOn:=clGray;
      end;
      if IOflags[13] then begin
        ledExtern.ColorOn:=clLime;
      end else
      begin
        ledExtern.ColorOn:=clGray;
      end;
      if IOflags[14] then begin
        ledIntern.ColorOn:=clLime;
      end else
      begin
        ledIntern.ColorOn:=clGray;
      end;

      // Stoerungsflags
      lstStoerung.Clear;
      if stoerungsflags[8] then
      begin
        lstStoerung.AddItem('Temp-Sensor (intern) def.',nil);
        lblTempInternVal.Caption:='-- ' + ' [°C]';
        TempIntern:=-40;

      end;
      if stoerungsflags[7] then
      begin
        lstStoerung.AddItem('Temp-Sensor (extern) def.',nil);
        lblTempExternVal.Caption:='-- ' + ' [°C]';
      end;
      if stoerungsflags[6] then
      begin
        lstStoerung.AddItem('Feuchte-Sensor def.',nil);
      end;
      if stoerungsflags[1] then
      begin
        lstStoerung.AddItem('Fan-2 (extern) def.',nil);
      end;
      if stoerungsflags[2] then
      begin
        lstStoerung.AddItem('Fan-1 (extern) def.',nil);
      end;
      if stoerungsflags[3] then
      begin
        lstStoerung.AddItem('Fan-2 (intern) def.',nil);
      end;
      if stoerungsflags[4] then
      begin
        lstStoerung.AddItem('Fan-1 (intern) def.',nil);
      end;
      if stoerungsflags[5] then
      begin
        lstStoerung.AddItem('Heizung def.',nil);
      end;
      active:=True;
    end
    else
    begin
      InitGUI;
      exit;
    end;
  end;
  time2:=GetTickCount -time1;
finally
// windows.Beep(1500,200);
  TTimer(Sender).Enabled:=TimerSollLaufen;
  if not(TimerSollLaufen) then InitGUI;
  TimerIsActive:=false;
  if active then
  begin
    ledVerbunden.ColorOn:=clLime;;
  end
  else
  begin
    ledVerbunden.ColorOn:=clGray;
  end;
end;
end;
  Mit Zitat antworten Zitat
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#30

Re: Timer stoppen

  Alt 29. Feb 2008, 14:24
Nach dem ersten Timer-Event ist tmrAblauf.Tag immer größer Null, richtig?
Und mit den Exit springst du am finally Block vorbei raus. Ist das Absicht?
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 08:04 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