Seite 2 von 3

Verfasst: 10.06.2008 11:22
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)

Verfasst: 10.06.2008 11:28
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.

Verfasst: 10.06.2008 14:24
von Shardik
Cron-Programm für Windows von Petr Vavrin (peterb):
http://www.purebasic.fr/english/viewtopic.php?t=25897

Verfasst: 10.06.2008 15:12
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.

Verfasst: 10.06.2008 15:14
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.

Verfasst: 10.06.2008 15:17
von ts-soft
Warum immer Thread, ein Timercallback sollte für Zeitsteuerung das
passende sein. Aber ich wiederhole mich. Thread <> Zeitsteuerung

Verfasst: 10.06.2008 16:14
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.

Verfasst: 10.06.2008 16:18
von ts-soft
Mit dem Timeout ist nicht annähernd so gut. Entsprechende API gibts auch
unter Linux (ähnliche Funktionalität, andere Syntax)

Verfasst: 10.06.2008 16:23
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.

Verfasst: 10.06.2008 17:21
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