AGB  ·  Datenschutz  ·  Impressum  







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

Thread mit timer gestartet

Ein Thema von akurka · begonnen am 27. Okt 2014 · letzter Beitrag vom 29. Okt 2014
Antwort Antwort
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#1

Thread mit timer gestartet

  Alt 27. Okt 2014, 11:01
Hallo
Mein Thread liest Daten von der Comport und schreibt sie in verschiedene globale Variablen.
Das funktioniert mit einer endlose Schleife im Thread.
Das ist aber sicher nicht die beste Lösung.
Ich möchte lieber, dass es periodisch alle 200mS passiert.
Wenn ich mit der Componente Timer (gestartet im Form1)
das Thread starte, funktioniert es nur so lang
Form1 aktiv ist.
Beim Wechsel in Form2 läuft der Timer nicht mehr und somit wird auch der Thread nicht gestartet.
Ja nun, wie lässt es sich machen, dass sich der Thread
alle 200mS selber startet und zwahr unabhängig davon
in welche Form x ich mich gerade befinde?
Im meinem Programm wird es vermutlich 8 verschiedene
Menüs geben => jeweils andere Forms.
Und wie lässt es sich machen das möglichst wenig Rechenzeit verbraucht wird während der Wartezeit ?
Eine endlose schleife mit sleep im thread-execute ist vermutlich nicht
die beste Lösung, oder ?
Anton Kurka
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 11:05
Das ist aber sicher nicht die beste Lösung.
Und wieso nicht? Wenn Du nicht willst, dass der Thread permanent Daten einliest, schick ihn halt eine Weile schlafen, das dürfte allemal besser als diese Timer-Lösung sein.
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
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#3

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 11:33
Der Timer braucht ja ein Window-Handle mit dem er dann läuft. Deswegen scheidet die Möglichkeit schonmal aus, einen Timer im Thread zu erstellen.
Ich habe das in einem Projekt bei mir genauso gemacht. In einer Schleife im Thread.Execute wird eine Funktion aufgerufen, die z.B. Daten einliest, und wenn die Funktion durch ist, dann rufe ich ein Sleep auf, und warte einige Zeit. Wenn das Sleep zurück kommt, dann läuft die Schleife weiter. Und damit wäre Dein Thread autark und läuft eigenständig in einer Schleife.

Irgendwie sowas:

Delphi-Quellcode:

procedure TMainThread.Execute;
begin
     FreeOnTerminate := False;
     Try
        While Not Terminated do
        Begin
             meineEinleseFunktion; // <---- Hier wird die Funktion aufgerufen, die die Daten einlesen soll
             Sleep(5000);
        End;
     Except
        On E:Exception do ; // TODO: Exception logging...
     End;
     Terminate;
end;
Christian Rüsken
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#4

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 12:19
Es gibt sicher bessere Lösungen, aber ohne das Programm jetzt komplett umzustellen könnte man den Timer einfach in ein Datenmodul verschieben.
Das lässt man beim Programmstart erstellen und ist immer da, egal welche Formulare angezeigt werden.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 13:44
Die Idee ist doch 'alle x ms Daten zu lesen'. Was spricht dann gegen das 'Sleep' in der Bearbeitungsschleife, wie von Bowler skizziert?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Thread mit timer gestartet

  Alt 27. Okt 2014, 13:57
Dafür gibt es in der Kernel32 die API SetWaitableTimer
Diesen Timer kann man dann innerhalb Thread.Execute erstellen.
Sleep ist immer eine schlechte Idee.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 10:38 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-2025 by Thomas Breitkreuz