Function in bestimmten Zeitabschnitten aufrufen
-
Guten Tag Com,
ich bin auf der suche nach einer Methode mit der ich eine Funktion in bestimmten zeitabschnitten aufrufe, ohne dass das Programm stehen bleibt.
Wenn jemand ne Idee hat und mir mit einem Beispiel helfen könnte wäre sehr nett:)
Mfg Hr4rjuku
-
In einer Schleife das Programm ausführen. In jedem Durchgang schauen, ob eine bestimmte Zeit bereits abgelaufen ist, und falls ja deine Funktion aufrufen.
Für Zeitmessung schau mal im
<chrono>-Header auf www.cppreference.com nach.
-
Suchst du sowas wie windows.setInterval bzw. window.setTimeout aus Javascript?
-
Nexus schrieb:
In einer Schleife das Programm ausführen. In jedem Durchgang schauen, ob eine bestimmte Zeit bereits abgelaufen ist, und falls ja deine Funktion aufrufen.
Für Zeitmessung schau mal im
<chrono>-Header auf www.cppreference.com nach.Naja aber wenn ich das so mache ist das ja sozusagen eine dauerschleife und somit wartet das programm ja bis das abgeschlossen wird. somit bleibt das ganze prog. stehen.?
Oder lieg ich da falsch
-
Stichwort: std::thread
-
Was macht denn das Programm, ist es konstant am Rechnen? Sobald du eine grafische Oberfläche hast, ist auch eine Hauptschleife üblich.
Threads würde ich nur mit gutem Grund nutzen, z.B. wenn der Hauptthread tatsächlich ausgelastet ist.
-
Wieso?
Je nachdem was man vorhat wird durch z.B. eine Managerklasse für immer wieder aufzurufende Funktion, die in einem speraten Thread läuft die Programmierung ein ganzes Stück einfacher.
-
Skym0sh0 schrieb:
Wieso?
Viele Anfänger haben das Gefühl, periodische Abläufe oder gleichzeitig erscheinende Dinge würden echte Parallelität voraussetzen, was oft nicht der Fall ist. Multithreading bringt einiges an Komplexität und macht das Programm nicht-deterministisch.
Natürlich kann ein Thread Dinge vereinfachen, aber wie gesagt sollte man gute Gründe dafür haben -- oft ist dieser Grund, weil ein Thread blockiert, z.B. indem er auf eine Eingabe oder einen Ladevorgang wartet. "Weil es einfacher ist" im Sinne von "ich muss nicht synchron denken" kann schnell nach hinten losgehen...
Am besten warten wir, bis hr4rjuku sein Programm genauer erklärt.
-
Im großen und Ganzen speicher ich verschiedene Datensätze, wie auch die Zeit in einem Vector ab. Wenn nun die aktuelle Zeit höher ist als die, die in dem Vector steht soll dieser komplette Eintrag gelöscht werden.
Deshalb dachte ich, ich mach nen Timer der dies durchführt ohne dass der Fortlauf des Programmes gestört wird.
Ich hoffe es ist zu erkennen was ich damit meine o.O
Danke für die Hilfe
Mfg Hr4rjuku
-
hr4rjuku schrieb:
Ich hoffe es ist zu erkennen was ich damit meine o.O
Noch nicht ganz. Sollen das also quasi Datensätze mit Verfallsdatum sein, die in dem vector gespeichert sind?
Muss diese Löschung überhaupt regelmäßig durchgeführt werden? Eine naheliegende Strategie wäre, dies erst dann zu erledigen, wenn es wirklich nötig ist, etwa wenn jemand einen Zugriff auf die Daten versucht.
-
SeppJ schrieb:
hr4rjuku schrieb:
Ich hoffe es ist zu erkennen was ich damit meine o.O
Noch nicht ganz. Sollen das also quasi Datensätze mit Verfallsdatum sein, die in dem vector gespeichert sind?
Muss diese Löschung überhaupt regelmäßig durchgeführt werden? Eine naheliegende Strategie wäre, dies erst dann zu erledigen, wenn es wirklich nötig ist, etwa wenn jemand einen Zugriff auf die Daten versucht.
Ja sozusagen mit Verfallsdatum
ja sobald das verfallsdatum von der aktuellen zeit überschritten wird. sollte es gelöscht werden.mfg hr4rjuku danke für die hilfe
-
hr4rjuku schrieb:
Deshalb dachte ich, ich mach nen Timer der dies durchführt ohne dass der Fortlauf des Programmes gestört wird.
Den wichtigen Teil hast du immer noch nicht beantwortet: was macht das Programm selbst, wie sieht dessen Ablauf aus?
Darum nochmals:
Nexus schrieb:
Was macht denn das Programm, ist es konstant am Rechnen?
-
Nexus schrieb:
hr4rjuku schrieb:
Deshalb dachte ich, ich mach nen Timer der dies durchführt ohne dass der Fortlauf des Programmes gestört wird.
Den wichtigen Teil hast du immer noch nicht beantwortet: was macht das Programm selbst, wie sieht dessen Ablauf aus?
Darum nochmals:
Nexus schrieb:
Was macht denn das Programm, ist es konstant am Rechnen?
OK Sorry übersehen
Der Benutzer kann neue Inhalte in den vector durchh eine input eingabe hinzufügen.
mehr ist es eig nich.
-
Versuch doch sowas:
while (!program_finished) { read_and_insert_new_value(); erase_old_values(); }
-
Wenn du mit
std::cineinliest, wartet der Hauptthread und wir haben genau den legitimen Fall von separaten Threads*
Du könntest mit
std::threadundstd::condition_variablearbeiten. Lies dich dazu auf www.cppreference.com ein. Bei normalem Sleep hast du das Problem, dass der Thread nicht sauber beendet werden kann, während er schläft._________
* Konsolenprogramme sind aber recht unflexibel in der Hinsicht. Bei Programmen mit Echtzeit-I/O und -Rendering kann der Hauptthread üblicherweise weiterarbeiten. Das gilt auch für viele GUIs, die in einer Hauptschleife arbeiten -- auch wenn diese teilweise wegabstrahiert wird und Interaktionen über Events/Callbacks geschehen. Aber das nur am Rande...
-
Nexus schrieb:
Wenn du mit
std::cineinliest, wartet der Hauptthread und wir haben genau den legitimen Fall von separaten Threads*
Du könntest mit
std::threadundstd::condition_variablearbeiten. Lies dich dazu auf www.cppreference.com ein. Bei normalem Sleep hast du das Problem, dass der Thread nicht sauber beendet werden kann, während er schläft._________
* Konsolenprogramme sind aber recht unflexibel in der Hinsicht. Bei Programmen mit Echtzeit-I/O und -Rendering kann der Hauptthread üblicherweise weiterarbeiten. Das gilt auch für viele GUIs, die in einer Hauptschleife arbeiten -- auch wenn diese teilweise wegabstrahiert wird und Interaktionen über Events/Callbacks geschehen. Aber das nur am Rande...gemacht und funzt ;:)
danke für eure Hilfe!
Mfg Hr4rjuku