Hallo zusammen,
ich versuche meine erste Konsolenanwendung zu schreiben und versuche seit einiger Zeit einen Timer(FPtimer) einzubinden.
Bisher ohne Erfolg.
Gibt es irgendwo ein Beispiel für eine Konsolenanwendung bei der ich abschauen kann wie der Timer implementiert wird?
... das was ich mit google finde ist mir noch zu kompliziert, ich brauche was für noobs .....
danke joachim
Console App mit FPTimer
Re: Console App mit FPTimer
Ein einfaches Beispiel findest Du bei Dir in einer aktuellen FPC (Windows) Version unter:
...lazarus\fpc\2.6.0\source\packages\fcl-base\examples\testtimer.pp
Michl
...lazarus\fpc\2.6.0\source\packages\fcl-base\examples\testtimer.pp
Michl
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Console App mit FPTimer
Da wird Sleep(1) verwendet.
Sleep(1) verursacht nur eine minimale durchschnittliche Verzögerung (Latenz), aber einen sehr großen CPU Overhead. (hohe CPU-Auslastung -> starke beeinträchtigung parallel laufender Applikationben und höchst möglichen Stromverbrauch.
Wenn Du dir eine größere Latenz leisten kannst, solltest Du einen längeren Sleep verwenden.
Besser wäre es natürlich einen Timer im Betriebssystem (also warten mit Hardware-Unterstützung zu verwenden. Ist aber deutlich komplizierter.
(Bei mse-IDE kann man den normalen TTimer ohne Einschränkung bezüglich der Laztenz und der CPU-Last auch bei nicht GUI basierten Applikationen verwenden.)
-Michael
Sleep(1) verursacht nur eine minimale durchschnittliche Verzögerung (Latenz), aber einen sehr großen CPU Overhead. (hohe CPU-Auslastung -> starke beeinträchtigung parallel laufender Applikationben und höchst möglichen Stromverbrauch.
Wenn Du dir eine größere Latenz leisten kannst, solltest Du einen längeren Sleep verwenden.
Besser wäre es natürlich einen Timer im Betriebssystem (also warten mit Hardware-Unterstützung zu verwenden. Ist aber deutlich komplizierter.
(Bei mse-IDE kann man den normalen TTimer ohne Einschränkung bezüglich der Laztenz und der CPU-Last auch bei nicht GUI basierten Applikationen verwenden.)
-Michael
Re: Console App mit FPTimer
danke schonmal,
mein Problem liegt aber noch davor ....
Bisher habe ich meine Programme (vor allem Delphi) mit der GUI erstellt. Da war es ja einfach eine z.B. Timercomponente einzufügen.
Bei der Konsolenapp geht das aber wohl nicht mehr so einfach, liegt wohl an der OOP. Leider konnte ich bisher keine für mich verständliche
Anleitung finden wie das zu machen wäre.
Bin aber noch weiter am suchen ....
Gruß joachim
mein Problem liegt aber noch davor ....
Bisher habe ich meine Programme (vor allem Delphi) mit der GUI erstellt. Da war es ja einfach eine z.B. Timercomponente einzufügen.
Bei der Konsolenapp geht das aber wohl nicht mehr so einfach, liegt wohl an der OOP. Leider konnte ich bisher keine für mich verständliche
Anleitung finden wie das zu machen wäre.
Bin aber noch weiter am suchen ....
Gruß joachim
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Console App mit FPTimer
Liegt daran, dass die LCL für solche Programme keine solche "OOP" zur Verfügung stellt. Das wäre dann eben kein "Commandline Tool" (Programm), sondern eine "Non-GUI-Application" (Anwendung).jomixl hat geschrieben:liegt wohl an der OOP.
[ Besserwisser-Modus an ]
Die Frage hier ist nicht "Objekt-Orientierte Programmierung" sondern "Ereignis-gesteuerte Programmierung".
Bei Ereignis-gesteuerter Programmierung wird der User-Code ausschießlich in "Events" untergebracht, die vom Laufzeit-System aufgerufen werden, wenn etwas entsprechendes zu tun ist. Der User-Code muss ein Event durchlaufen und wieder verlassen, und braucht (und darf) dabei nich auf irgendetwas warten. (Das geht mit und ohne OOP.).
Das Lazarus (und Delphi) Laufzeit-System kann nur im "Mainthread" Events auslösen. "Worker-Threads" sind nicht in dieser Weise benutzbar. Sie dürfen also auch blockieren (z.B. auf Input von "außen" in einem Blocking Read warten.
-Michael
Re: Console App mit FPTimer
genau das ist ja mein Problem:
wie komme ich zu meinem Timer event bzw. wie muß ich den Timer implementieren.
Auch bei der TApplication hab ich so meine Probleme, wo kommt jetzt mein Programm hin ......, wie sieht ein zweiter Timer aus usw.
also alles Anfänger bzw. Verständnisprobleme.
In den Tutorials wird immer nur der Programmrumpf erklärt, aber keiner sagt mir dann wie es weiter geht .....
bin aber noch am suche ...
joachim
wie komme ich zu meinem Timer event bzw. wie muß ich den Timer implementieren.
Auch bei der TApplication hab ich so meine Probleme, wo kommt jetzt mein Programm hin ......, wie sieht ein zweiter Timer aus usw.
also alles Anfänger bzw. Verständnisprobleme.
In den Tutorials wird immer nur der Programmrumpf erklärt, aber keiner sagt mir dann wie es weiter geht .....
bin aber noch am suche ...
joachim
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Console App mit FPTimer
Wie mschnell schon schrieb, tnoguiapplication von MSEgui kann das. Hier werden alle nicht visuellen Komponenten (ttimer, tthreadcomp, tpipereadercomp, tprocessmonitor, tpipeiochannel, die Datenbank-Komponenten...) in Konsolenprogrammen zur Entwicklungszeit in Datamodulen plaziert und funktionieren zur Laufzeit wie in GUI-Programmen.jomixl hat geschrieben: bin aber noch am suche ...
Martin