Function in bestimmten Zeitabschnitten aufrufen



  • 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


  • Mod

    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::cin einliest, wartet der Hauptthread und wir haben genau den legitimen Fall von separaten Threads* 😉

    Du könntest mit std::thread und std::condition_variable arbeiten. 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::cin einliest, wartet der Hauptthread und wir haben genau den legitimen Fall von separaten Threads* 😉

    Du könntest mit std::thread und std::condition_variable arbeiten. 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


Anmelden zum Antworten