<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[RepeatingTasks beenden sich nicht richtig]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>in einem anderen Thread habe ich von SeppJ die RepeatingTasks bekommen, womit ich zyklisch Threads aufrufen kann.</p>
<p>Jetzt habe ich aber das Problem, dass, wenn das Programm beendet wird, weil die Hardware z.B. sich herunterfährt, die zyklischen Threads mittels der stop()-Funktion wahrscheinlich nicht richtig beendet werden,<br />
was zu folgenden Fehlern führt:</p>
<pre><code>PROGRAM ERROR: [SIGSEGV] false memory access
</code></pre>
<p>Mein Kollege hat folgende Vermutung:<br />
&quot;Die RepeatingTasks sind auch eigenständige Threads, genauer gesagt sogar mindestens jeweils zwei: einer läuft dauernd in der execute_task()-Schleife, und der erzeugt alle Nase lang einen neuen Thread, der den jeweiligen Job abarbeitet.</p>
<p>Das stop() sorgt zwar dafür, dass die execute_task()-Schleife abbricht, aber die von der Schleife gestarteten Threads laufen erst mal parallel weiter. Und je nachdem, auf welche Ressourcen dabei zugegriffen wird, kann es schon sein, dass einem der Threads beim Beenden der Applikation der Boden unter den Füßen weggezogen wird =&gt; SIGSEGV &quot;</p>
<p>Wie löst man das Problem richtig ?<br />
Wie bekomme ich die gestarteten Threads beendet ?</p>
<p>Ursprünglicher Thread und RepeatingTask hier: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /><br />
<a href="https://www.c-plusplus.net/forum/335534">https://www.c-plusplus.net/forum/335534</a></p>
<p>Ich hoffe, ich habe mich verständlich und nachvollziehbar ausgedrückt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /><br />
Falls nicht, bitte bitte nochmal nachfragen, denn für mich als Nicht Außenstehender ist es einfacher das Geschriebene zu verstehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Danke für alle Hilfestellungen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/336226/repeatingtasks-beenden-sich-nicht-richtig</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 13:45:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336226.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Jan 2016 06:40:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Mon, 11 Jan 2016 06:40:47 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>in einem anderen Thread habe ich von SeppJ die RepeatingTasks bekommen, womit ich zyklisch Threads aufrufen kann.</p>
<p>Jetzt habe ich aber das Problem, dass, wenn das Programm beendet wird, weil die Hardware z.B. sich herunterfährt, die zyklischen Threads mittels der stop()-Funktion wahrscheinlich nicht richtig beendet werden,<br />
was zu folgenden Fehlern führt:</p>
<pre><code>PROGRAM ERROR: [SIGSEGV] false memory access
</code></pre>
<p>Mein Kollege hat folgende Vermutung:<br />
&quot;Die RepeatingTasks sind auch eigenständige Threads, genauer gesagt sogar mindestens jeweils zwei: einer läuft dauernd in der execute_task()-Schleife, und der erzeugt alle Nase lang einen neuen Thread, der den jeweiligen Job abarbeitet.</p>
<p>Das stop() sorgt zwar dafür, dass die execute_task()-Schleife abbricht, aber die von der Schleife gestarteten Threads laufen erst mal parallel weiter. Und je nachdem, auf welche Ressourcen dabei zugegriffen wird, kann es schon sein, dass einem der Threads beim Beenden der Applikation der Boden unter den Füßen weggezogen wird =&gt; SIGSEGV &quot;</p>
<p>Wie löst man das Problem richtig ?<br />
Wie bekomme ich die gestarteten Threads beendet ?</p>
<p>Ursprünglicher Thread und RepeatingTask hier: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /><br />
<a href="https://www.c-plusplus.net/forum/335534">https://www.c-plusplus.net/forum/335534</a></p>
<p>Ich hoffe, ich habe mich verständlich und nachvollziehbar ausgedrückt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /><br />
Falls nicht, bitte bitte nochmal nachfragen, denn für mich als Nicht Außenstehender ist es einfacher das Geschriebene zu verstehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Danke für alle Hilfestellungen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2482580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2482580</guid><dc:creator><![CDATA[Tuxx]]></dc:creator><pubDate>Mon, 11 Jan 2016 06:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Mon, 11 Jan 2016 21:16:38 GMT]]></title><description><![CDATA[<p>Grundlegend gibt es zwei Möglichkeiten:<br />
1. Man wartet, bis alle Tasks fertig sind, bevor das Programm beendet wird. Das heißt konkret, dass man die Threads eben nicht detached, sondern joined.<br />
2. Man muss den Threads irgendeine Art von Signal schicken, dass sie sich beenden sollen. Die Tasks müssen regelmäßig auf dieses Signal prüfen und dann gegebenenfalls abbrechen. Wenn sich alle Tasks beendet haben (siehe 1.), kann man das Programm beenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2482757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2482757</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Jan 2016 21:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Tue, 12 Jan 2016 08:59:17 GMT]]></title><description><![CDATA[<p>Hallo SeppJ,</p>
<p>danke für deine Antwort.</p>
<p>1. hab ich auch schon probiert, aber dann steht das komplette Programm.<br />
Deswegen ist das detach toll, damit es unabhängig im Hintergrund läuft.<br />
Was wiederum natürlich doof ist, weil ich unabhängige nicht mehr steuern kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
<p>2. Denkst du da an mutexe und condition variable ?<br />
Damit hab ich zuletzt im Studium zutun gehabt und nie komplett verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /><br />
Daran dachte ich auch schon, aber wüsste jetzt nicht, wie ich die da einarbeite, weil ständig neue Tasks erstellt werden, die dann unabhängig laufen.<br />
Ich weiß daher nicht, wie ich die &quot;rufen&quot; und beenden soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
<p>Auf dem Gebiet bin ich totaler Newbie und die Erklärungen im Internet helfen mir leider gerade nicht weiter es zu verstehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2482801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2482801</guid><dc:creator><![CDATA[Tuxx]]></dc:creator><pubDate>Tue, 12 Jan 2016 08:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Tue, 12 Jan 2016 20:18:28 GMT]]></title><description><![CDATA[<p>Tuxx schrieb:</p>
<blockquote>
<p>Deswegen ist das detach toll, damit es unabhängig im Hintergrund läuft.</p>
</blockquote>
<p>Das war ja auch der Plan <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Die grundlegende Frage ist: Was soll passieren? Soll das Programm tendenziell eher warten, bis alle Subprozesse fertig sind, bevor es sich beendet? Oder sollen möglichst schnell alle Subprozesse beendet werden (auch wenn sie noch nicht fertig sind), wenn das Programm sich beenden möchte? Oder etwas dazwischen? Wenn diese Frage geklärt ist, kann man über die genaue Umsetzung reden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2482961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2482961</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 12 Jan 2016 20:18:28 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Wed, 13 Jan 2016 05:18:22 GMT]]></title><description><![CDATA[<p>Hallo SeppJ,</p>
<p>da gebe ich dir vollkommen Recht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ich habe mein Programm am laufen.<br />
Dieses erzeugt einen Server, der darauf wartet, dass sich ein Client verbindet.<br />
Ist dies geschehen, läuft mein eigentliches Programm, in dem ich zwei RepeatingTasks benötige.</p>
<p>Wird der Client unverhofft gekappt oder das System will sich herunterfahren,<br />
muss das eigentliche Programm mit allen offenen Threads geschlossen werden, der Client eventuell geschlossen werden, der Server heruntergefahren werden und dann beendet sich auch meine main().</p>
<p>Bis jetzt bekomme ich immer Fehler, dass auf Speicher noch zugegriffen wird, der nicht mehr existiert.<br />
Also muss ich irgendwie sicherstellen, dass das programm in dem Falle wartet, bis alle offenen Threads geschlossen wurden, bevor der Client und Server geschlossen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483010</guid><dc:creator><![CDATA[Tuxx]]></dc:creator><pubDate>Wed, 13 Jan 2016 05:18:22 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Wed, 13 Jan 2016 06:24:54 GMT]]></title><description><![CDATA[<p>Wenn wir wirklich brav warten dürfen, bis alles fertig ist, können wir einfach mitzählen:</p>
<pre><code>#include &lt;thread&gt;
#include &lt;atomic&gt;
#include &lt;chrono&gt;
#include &lt;functional&gt;

class RepeatingTask
{
private:
  std::atomic_int running;
  std::function&lt;void()&gt; task;
  std::chrono::nanoseconds interval;
  std::atomic_uint num_running_threads;

  void execute_task()
  {
    while(running)
      {
        std::thread t([this]()
                      {
                        ++num_running_threads;
                        task();
                        --num_running_threads;
                      }
                      );
        t.detach();
        std::this_thread::sleep_for(interval);
      }
  }

public:
  RepeatingTask(std::function&lt;void()&gt; task, std::chrono::nanoseconds interval):
    running(0), task(task), interval(interval), num_running_threads(0) {}

  RepeatingTask(const RepeatingTask&amp;) = delete;
  RepeatingTask &amp;operator=(const RepeatingTask&amp;) = delete;

  void run()
  {
    running = 1;
    std::thread t(std::bind(&amp;RepeatingTask::execute_task, this));
    t.detach();
  }

  void stop() {running = 0;}
  void join()
  {
    stop();
    while(num_running_threads)
      {
        std::this_thread::yield();
      }
  } 
};

// Beispiel
#include &lt;iostream&gt;
void ausgabe()
{
  using namespace std::chrono_literals;
  for (int i = 1; i &lt; 5; ++i)
    {
      std::cout &lt;&lt; &quot;Thread Nummer &quot; &lt;&lt; std::this_thread::get_id() &lt;&lt; &quot;, bei Zahl &quot; &lt;&lt; i &lt;&lt; '\n';
      std::this_thread::sleep_for(1.4s);
    }
}

int main()
{
  using namespace std::chrono_literals;
  RepeatingTask task(ausgabe, 1s);
  task.run();
  std::this_thread::sleep_for(5s);
  std::cout &lt;&lt; &quot;Leite Programmbeendigung ein.\n&quot;;
  task.join();
  std::cout &lt;&lt; &quot;Alle Hintergrundanwendungen sind fertig. Beende.\n&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2483013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483013</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 13 Jan 2016 06:24:54 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Wed, 13 Jan 2016 10:51:34 GMT]]></title><description><![CDATA[<p>Danke, genau das, was ich gesucht habe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483029</guid><dc:creator><![CDATA[Tuxx]]></dc:creator><pubDate>Wed, 13 Jan 2016 10:51:34 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Wed, 13 Jan 2016 15:31:03 GMT]]></title><description><![CDATA[<p>Eine Frage noch an dich, SeppJ:</p>
<p>Den Code über RepeatingTask hast du ja geschrieben oder ?</p>
<p>Muss ich das in meinem Code irgendwie kennzeichnen zwecks copyright etc. ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483064</guid><dc:creator><![CDATA[Tuxx]]></dc:creator><pubDate>Wed, 13 Jan 2016 15:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Wed, 13 Jan 2016 17:36:31 GMT]]></title><description><![CDATA[<p>Tuxx schrieb:</p>
<blockquote>
<p>Eine Frage noch an dich, SeppJ:</p>
<p>Den Code über RepeatingTask hast du ja geschrieben oder ?</p>
<p>Muss ich das in meinem Code irgendwie kennzeichnen zwecks copyright etc. ?</p>
</blockquote>
<p>Ja, das ist von mir. Aber die paar Zeilen, die ich da mal eben schnell runtergehackt habe, kannst du gerne übernehmen, das ist nicht schützenswert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483081</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 13 Jan 2016 17:36:31 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Thu, 14 Jan 2016 02:22:50 GMT]]></title><description><![CDATA[<p>Wieso wird da eigentlich bei jedem Tick ein neuere Thread erzeugt, auch wenn die Funktion vom alten Tick noch nicht fertig gelaufen ist?<br />
Ist das wirklich Absicht?</p>
<p>Ich hätte - wenn nicht speziell angegeben ist dass man es anders braucht - grundsätzlich mal die Version mit 1 Thread pro <code>RepeatingTask</code> implementiert. Also die wo <code>execute_task</code> die Task-Funktion synchron aufruft und dann wartet bis es Zeit für den nächsten Aufruf ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483121</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 Jan 2016 02:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Thu, 14 Jan 2016 02:28:15 GMT]]></title><description><![CDATA[<p>ps:<br />
Die <code>RepeatingTask</code> Objekte kann man nicht sauber löschen, da join() nicht sicherstellt dass <code>execute_task()</code> schon verlassen wurde.<br />
(Und natürlich sollte <code>join</code> vermutlich auch im Dtor aufgerufen werden, RRID und so.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483122</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 Jan 2016 02:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Thu, 14 Jan 2016 02:33:49 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wieso wird da eigentlich bei jedem Tick ein neuere Thread erzeugt, auch wenn die Funktion vom alten Tick noch nicht fertig gelaufen ist?<br />
Ist das wirklich Absicht?</p>
</blockquote>
<p>Das war es, wie ich die Anforderungen des Threaderstellers in seinem Ursprungsthread verstanden habe. Ob der Threadersteller seine Anforderung auch wirklich richtig herüber gebracht hat, habe ich mich auch gefragt und daher absichtlich Beispiele konstruiert, die diese Eigenschaft demonstrieren. Er hat sich nicht beschwert.</p>
<p>Falls man hingegen jeweils eine neue Ausführung der Aufgabe in einem bestimmten Abstand zur Beendigung der letzten Aufgabe haben möchte, wird das ganze Problem (sowohl das aktuelle, als auch die Ursprungsfrage) ziemlich trivial.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>ps:<br />
Die <code>RepeatingTask</code> Objekte kann man nicht sauber löschen, da join() nicht sicherstellt dass <code>execute_task()</code> schon verlassen wurde.<br />
(Und natürlich sollte <code>join</code> vermutlich auch im Dtor aufgerufen werden, RRID und so.)</p>
</blockquote>
<p>Guter Hinweis, habe ich übersehen. Hmm, trickreich. Da muss ich mal etwas darüber nachdenken. edit: Sollte gehen, indem man sich einen Handle auf den execute_task-Thread merkt und diesen in RepeatingTask::join selber joined. Oder übersehe ich da etwas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483123</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 14 Jan 2016 02:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Thu, 14 Jan 2016 02:41:42 GMT]]></title><description><![CDATA[<p>Jo, ich frage auch hauptsächlich um dem Threadersteller das nochmal klarzumachen. Weil ich das im ursprünglichen Thread nicht so verstanden habe. Und wenn man es nicht so <em>braucht</em>, dann <em>will</em> man es vermutlich auch nicht so <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Falls man hingegen jeweils eine neue Ausführung der Aufgabe in einem bestimmten Abstand zur Beendigung der letzten Aufgabe haben möchte, wird das ganze Problem (sowohl das aktuelle, als auch die Ursprungsfrage) ziemlich trivial.</p>
</blockquote>
<p>Fixes Delay zwischen Ende des letzten Aufrufs und Start des neuen ist meist auch doof. Meist will man fixe Abstände zwischen den Anfängen der Aufrufe, <em>ausser</em> eben wenn der letzte Aufruf zu lange gedauert hat, dann den nächsten Aufruf einfach ohne Verzögerung. Wie bei Spielen mit VSync quasi <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ist aber natürlich auch immer noch halbwegs einfach zu machen.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Hmm, trickreich. Da muss ich mal etwas darüber nachdenken.</p>
</blockquote>
<p>Müsste ein <code>join()</code> auf den Thread der <code>execute_task()</code> ausführt reichen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483124</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 Jan 2016 02:41:42 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Thu, 14 Jan 2016 02:49:27 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>edit: Sollte gehen, indem man sich einen Handle auf den execute_task-Thread merkt und diesen in RepeatingTask::join selber joined. Oder übersehe ich da etwas?</p>
</blockquote>
<p>Nö genau so hätte ich das auch gemacht.</p>
<p>Wobei ich dann das <code>sleep_for</code> vermutlich durch ein <code>std::condition_variable_any::wait_for</code> ersetzen würde. Damit das joinen net unnötig verzögert wird. Dann muss natürlich ne <code>mutex</code> her, dafür braucht <code>running</code> nimmer atomic sein, weil man ja jetzt die <code>mutex</code> dafür hernehmen kann.</p>
<p>Und wenn man dann eh schon ne CV + mutex hat, dann kann man auch gleich noch ne 2. CV für <code>num_running_threads</code> machen und den spin-wait durch nen CV-wait ersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483125</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 Jan 2016 02:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Thu, 14 Jan 2016 03:14:56 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wobei ich dann das <code>sleep_for</code> vermutlich durch ein <code>std::condition_variable_any::wait_for</code> ersetzen würde. Damit das joinen net unnötig verzögert wird. Dann muss natürlich ne <code>mutex</code> her, dafür braucht <code>running</code> nimmer atomic sein, weil man ja jetzt die <code>mutex</code> dafür hernehmen kann.</p>
</blockquote>
<p>Jupp, genau mein Gedanke.</p>
<blockquote>
<p>Und wenn man dann eh schon ne CV + mutex hat, dann kann man auch gleich noch ne 2. CV für <code>num_running_threads</code> machen und den spin-wait durch nen CV-wait ersetzen.</p>
</blockquote>
<p>Jetzt ist bloß noch die Frage, ob der TE mit der Beschreibung alleine zurecht kommt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483126</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 14 Jan 2016 03:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Thu, 14 Jan 2016 03:22:07 GMT]]></title><description><![CDATA[<p>Nö, aber dafür hat er ja den SeppJ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483127</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 Jan 2016 03:22:07 GMT</pubDate></item><item><title><![CDATA[Reply to RepeatingTasks beenden sich nicht richtig on Thu, 14 Jan 2016 05:34:05 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>erstmal danke SeppJ, dass ich den Code einfach so verwenden darf,<br />
mein Chef fragte nämlich, nicht dass unsere Firma da Probleme bekommt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>Auf die Idee mit mutex und CV bin ich auch schon gekommen gestern,<br />
nachdem mein Programm immer abstürzte wegen false memory access und abnormal interupt.</p>
<p>Ich hab eigentlich genau das, was ihr in der letzten Nacht ;-), wo ich friedlich geschlafen habe, erörtert habt, gestern abend vor dem Feierabend noch umgesetzt.<br />
Ich hab nen mutex und eine CV und ein extra exec thread, der execute_task aufruft und einfach nur wartet und sicherstellt, dass alle offenen threads zum schluss geweckt und ordentlich beendet werden und erst dann beendet sich exec und mein Programm endet ohne Fehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>Er überprüft einfach in der stop(), ob exec joinable ist und wenn ja, macht er den join() und wartet...</p>
<p>Und wenn ich nicht gestern darauf gekommen wäre, hätte ich es jetzt gewusst durch eure gute Beschreibung - also Ja, ich wäre mit eurer Beschreibung zurecht gekommen</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2483129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2483129</guid><dc:creator><![CDATA[Tuxx]]></dc:creator><pubDate>Thu, 14 Jan 2016 05:34:05 GMT</pubDate></item></channel></rss>