AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TThread reagiert unterschiedlich schnell
Thema durchsuchen
Ansicht
Themen-Optionen

TThread reagiert unterschiedlich schnell

Ein Thema von BAMatze · begonnen am 24. Sep 2009 · letzter Beitrag vom 24. Sep 2009
 
BAMatze

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

TThread reagiert unterschiedlich schnell

  Alt 24. Sep 2009, 12:28
Hallo und guten Tag an alle,

Hab nochmal eine Frage zu TThreads. Undzwar habe ich jetzt meinen Thread für mein Programm fertig, aber aus irgendwelchen, mir nicht wirklich verständlichen Gründen, reagiert dieser nicht so wie ich mir das vorstelle sondern eher konfus und chaotisch.

erstmal hier die wichtigsten (Execute- und Update- Funktion des Threads, weil hier der sprichwörtliche Hund begraben sein muss)

Delphi-Quellcode:
procedure TControlCardControlThread.Execute;
var c, iIndex: integer;
    
begin
  repeat
  c := GetTickCount;
  Synchronize(UpdateForm3); // gemäß Tutorial alle Interaktionen mit der Oberfläche über Synchronize
  c := {interval}50 - (GetTickCount - c);
  if c > 0 then Sleep(c);
until Terminated;
end;

{////////////////////////////////////////////////////////////////////////////////////}
{/                           Interaktion mit Oberfläche                             /}
{////////////////////////////////////////////////////////////////////////////////////}


procedure TControlCardControlThread.UpdateForm3;
var i: integer;
    bGeneralDigChannelInput, bCriticalDigChannelInput: boolean;
begin
  if Board.digEingang[1] then Form3.Statusbar1.Panels[1].Text := 'oben'
  else Form3.Statusbar1.Panels[1].Text := 'unten';
  bgeneralDigChannelInput := false;
  bcriticalDigChannelInput := false;
  for i := 1 to 5 do
    begin
      case not(FabDigChannelSignals[i] xor Board.digEingang[i]) of // wenn Werte unterschiedlich sind, dann muss etwas getan werden
      false: begin
               // Tätigkeiten wenn sich etwas an einem der 5 digitalen Eingänge getan hat
               DoSingleDigChannelInput(i); // verweißt auf ein Event, das den den Eingang mit übergibt
               bGeneralDigChannelInput := true; // boolsche Variable, die später ein Event auslöst, welches angibt ob sich generell etwas geändert hat
               if i in [2..4] then bcriticalDigChannelInput := true; // boolsche Variable, die später ein Event auslöst, wenn einer der kritischen Eingänge ausgelöst wurden.
               FabDigChannelSignals[i] := Board.digEingang[i]; // angleichen des Ausgangszustandes für nächste Prüfung
             end;
      end;
      // optische Anpassung, damit man sehen kann, was intern passiert
      (Form3.findcomponent('CheckBox' + inttostr(i+8)) as TCheckBox).Checked:= fabDigChannelSignals[i];
      if i in [1..2] then (Form3.findcomponent('ProgressBar' + inttostr(i)) as TProgressBar).Position := Board.anaEingang[i]
    end;
  // löst das blinken eines roten Lichtes an der Maschine aus
  if FbBlinkRedLight then Board.RedLight := not Board.RedLight;
  // Eventbehandlung
  if bGeneralDigChannelInput then doGeneralDigChannelInput;
  if bCriticalDigChannelInput then doCriticalDigChannelInput;

  // otpische Anpassung, um zu sehen, ob der Thread läuft
  case Counter of
  0: Form3.StatusBar1.Panels[0].Text := '/';
  1: Form3.StatusBar1.Panels[0].Text := '|';
  2: Form3.StatusBar1.Panels[0].Text := '\';
  3: Form3.StatusBar1.Panels[0].Text := '-';
  end;
  Counter := Counter + 1;
  if Counter > 3 then Counter := 0;
end;
ok folgende "Phänomene sind zu beobachten: die optische Anpassung der Checkboxen erfolgt erst nach einigen Sekunden, hingegen das Blinken des roten Lichtes erfolgt sofort, wenn der digitale Eingang ausgelöst wird. Das anpassen der Checkboxen ist dabei mit unterschiedlich langen Reaktionszeiten zu vermerken.

Warum reagieren einige Elemente in dem Thread unterschiedlich schnell? Was verlangsamt dort eventuell die Reaktionszeit des Threads? Augenscheinlich läuft der Thread konstant, was an dem drehenden Balken optisch erkennbar ist.

Hoffe Ihr könnt mir helfen
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
 


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 07:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz