Etwas zu einem Zeitpunkt ausführen? [gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Beitrag von gekkonier »

Ich werds versuchen mal zu beschreiben was ich machen will:

in einem Programm stelle ich ein, dass z.B.
jeden Tag zwischen 5:00 und 21:00 alle 5 Minuten ein zweites Programm aufgerufen wird.
Hier werde ich wohl mit Date(), Delay() und Schleifen arbeiten.

Das zweite Programm (welches vom 1. Programm regelmässig aufgerufen wird) soll bei Aufruf einfach fortlaufend nummeriert ein Bild mit einem Text darin (aktuelles Datum und Uhrzeit, aufskalieren auf PAL) das Bild ablegen (funktioniert schon).

Momentan hab ich das zweite Programm einfach mit dem gewünschten Delay in einer Schleife laufen.

Ich möchte deshalb das 1. Programm (ich nenns mal Fakecron) gesondert programmieren, damit ich bei Bedarf auch Fremdprogramme ausführen kann, und da ist eben die Frage gewesen, wie man soetwas ressoursenschonend macht.

Der Computer auf dem diese Teile laufen läuft rund um die Uhr und beherbergt auch noch andere Applikationen, die rund um die Uhr laufen müssen.

Den Task Scheduler von Windows selber möchte ich nicht verwenden, da es mir eigentlich widerstrebt mehrere Tasks irgendwie anzusteuern. Ich denke es ist leichter selber einen Programmscheduler zu basteln, als den von Windows remotemässig zu verwenden.

Momentaner Stand der Dinge: Ich werds wohl so machen, wie Rokur in der allerersten Antwort geschrieben hat realisieren. Kann aber auch sein, dass ich mir einen Cron Clone für Windows suche (cronjobs sind einfach viel flexibler zu verwalten, als der Taskscheduler)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ah verstehe.

also, da würde ich wirklich differenzen ermitteln,
und mit WaitWindowEvent(Zeitdifferenz) arbeiten,
das stellt schon mal sicher, dass wenn kein ereignis auftritt,
dein steuerprog ressourcenschonend die Differenz lang wartet.
in der Eventschleife kannst du dann prüfen, ob EventID = 0,
und darauf hin deine Timer-Geschichte durchführen.

soweit mit PB-Bordmitteln

ansonsten, wenn Window-spezifisch ok ist,
es gibt auch einen Timer-Callback über API, der dürfte auch verwendbar sein.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Cron-Programm für Windows von Petr Vavrin (peterb):
http://www.purebasic.fr/english/viewtopic.php?t=25897
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag von Rokur »

Was du auf keinen Fall machen solltest ist ein Delay() das größer als ein paar Sekunden ist, da dein Programm dann solange nicht mehr reagiert.
Selbst wenn es ohne GUI im Hintergrund läuft könntest du es während des Delay() nur "gewaltsam" beenden.
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Beitrag von gekkonier »

Ich hätte die Zeitsteuerung in einen eigenen Thread auslagern, damit die GUI keine Hänger hat. Somit hätte ich die Chance das ganze System wohlgeformt runterzufahren.

Aber, so wie es aussieht werde ich wohl wirklich einen cron-clone befleissigen, gibt ja schon zuhaufe.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Warum immer Thread, ein Timercallback sollte für Zeitsteuerung das
passende sein. Aber ich wiederhole mich. Thread <> Zeitsteuerung
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hab ich ja auch schon gesagt... und selbst wenn man kein API verwenden will,
ein WaitWindowEvent(Timeout) mit nem großen Timeout ist doch auch prima geeignet
um den check hinauszuzögern aber auf events zu reagieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Mit dem Timeout ist nicht annähernd so gut. Entsprechende API gibts auch
unter Linux (ähnliche Funktionalität, andere Syntax)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

...hast du eigentlich jemals im API- oder im C,T&T-Unterforum mal ein how-to gepostet,
oder müßte man sich das jetzt mühsam zusammenklauben...

ich weiß, dass du schon des öfteren nen Timer-Callback-Beispiel gepostet hast,
aber ob man das jetzt findet ist noch die zweite frage.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Kaeru Gaman hat geschrieben:...hast du eigentlich jemals im API- oder im C,T&T-Unterforum mal ein how-to gepostet,
oder müßte man sich das jetzt mühsam zusammenklauben...

ich weiß, dass du schon des öfteren nen Timer-Callback-Beispiel gepostet hast,
aber ob man das jetzt findet ist noch die zweite frage.
http://www.purebasic.fr/german/viewtopi ... 561#109561
der dritte code, einer von hunderten treffern, die aber nicht alle was taugen :mrgreen:
Für höhere Genauigkeit dann den HighResTimer von danilo, bzw. die von mir
angepaßte include. Die ist aber eher für Spielerchen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten