<?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[Design Pattern für Tasks]]></title><description><![CDATA[<p>Hi,</p>
<p>ich suche nach einem geeigneten Pattern für folgendes Problem:</p>
<pre><code>class Task
{
public:
  void execute();
  void cancel() { canceling = true;}; 
  void setCallback(TaskCallback* callback); //setter

private:
 std::list&lt;SubTask&gt; subTasks;
 bool canceling = false; 
 TaskCallback* callback; 
};

void Task::execute()
{
   for(subTask : subTasks)
   {
      if(canceling)
      {
        if(callback)
          callback-&gt;onCancel(); 

        return;
      }
      subTask-&gt;execute(); 
   }

   if(callback)
      callback-&gt;onDone(); 
}
</code></pre>
<p>Wenn Task::execute aufgerufen wird, werden die zu diesem Task dazugehörigen SubTasks nacheinander ausgeführt. Nach jedem SubTask soll der Task gecancelt werden können. Jeder SubTask liefert als Output ein Ergebnis zurück, dass vom nächsten SubTask als Input verwendet werden soll. Wie moduliert man das am sinnvollsten?</p>
<p>Ich möchte dies gern allgemein modulieren, so dass im Objekt Task alle möglichen Aufgaben abgearbeitet werden können. Gibt es hierfür irgendwelche Designpattern?</p>
<p>Gruß<br />
patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/336945/design-pattern-für-tasks</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 22:16:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336945.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Feb 2016 19:53:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Design Pattern für Tasks on Thu, 25 Feb 2016 19:53:45 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich suche nach einem geeigneten Pattern für folgendes Problem:</p>
<pre><code>class Task
{
public:
  void execute();
  void cancel() { canceling = true;}; 
  void setCallback(TaskCallback* callback); //setter

private:
 std::list&lt;SubTask&gt; subTasks;
 bool canceling = false; 
 TaskCallback* callback; 
};

void Task::execute()
{
   for(subTask : subTasks)
   {
      if(canceling)
      {
        if(callback)
          callback-&gt;onCancel(); 

        return;
      }
      subTask-&gt;execute(); 
   }

   if(callback)
      callback-&gt;onDone(); 
}
</code></pre>
<p>Wenn Task::execute aufgerufen wird, werden die zu diesem Task dazugehörigen SubTasks nacheinander ausgeführt. Nach jedem SubTask soll der Task gecancelt werden können. Jeder SubTask liefert als Output ein Ergebnis zurück, dass vom nächsten SubTask als Input verwendet werden soll. Wie moduliert man das am sinnvollsten?</p>
<p>Ich möchte dies gern allgemein modulieren, so dass im Objekt Task alle möglichen Aufgaben abgearbeitet werden können. Gibt es hierfür irgendwelche Designpattern?</p>
<p>Gruß<br />
patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488614</guid><dc:creator><![CDATA[patrick_hauser]]></dc:creator><pubDate>Thu, 25 Feb 2016 19:53:45 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern für Tasks on Fri, 26 Feb 2016 01:53:38 GMT]]></title><description><![CDATA[<p>Wie wärs mit Boost.Signal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2488664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488664</guid><dc:creator><![CDATA[blurb]]></dc:creator><pubDate>Fri, 26 Feb 2016 01:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to Design Pattern für Tasks on Fri, 26 Feb 2016 09:27:23 GMT]]></title><description><![CDATA[<p>patrick_hauser schrieb:</p>
<blockquote>
<p>ich suche nach einem geeigneten Pattern für folgendes Problem:</p>
</blockquote>
<p>Ist das nicht schon fast die Lösung? Was genau ist das Problem?</p>
<p>patrick_hauser schrieb:</p>
<blockquote>
<p>Jeder SubTask liefert als Output ein Ergebnis zurück, dass vom nächsten SubTask als Input verwendet werden soll. Wie moduliert man das am sinnvollsten?</p>
</blockquote>
<p>Ungefähr so?</p>
<pre><code class="language-cpp">void Task::execute()
{
	boost::optional&lt;Ergebnis&gt; lastResult;
   for(subTask : subTasks)
   {
      if(canceling)
      {
        if(callback)
          callback-&gt;onCancel();

        return;
      }
      lastResult = subTask-&gt;execute(lastResult);
   }

   if(callback)
      callback-&gt;onDone();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2488689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2488689</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Fri, 26 Feb 2016 09:27:23 GMT</pubDate></item></channel></rss>