|
99 | 99 | <h1><a class="anchor" id="WhatIsATask"></a>
|
100 | 100 | What is a Task?</h1>
|
101 | 101 | <p>A task in Cpp-Taskflow is a callable object for which the operation <a href="https://en.cppreference.com/w/cpp/utility/functional/invoke">std::invoke</a> is applicable. It can be either a functor, a lambda expression, a bind expression, or a class objects with <code>operator()</code> overloaded.</p>
|
102 |
| -<p>Cpp-Taskflow provides three methods, <a class="el" href="classtf_1_1FlowBuilder.html#ac22f244fb2ec58809192faafa266c58c" title="creates an empty task ">tf::Taskflow::placeholder</a>, <a class="el" href="classtf_1_1FlowBuilder.html#a7285613836c840e22b8511d447734c87" title="creates a task from a given callable object without access to the result ">tf::Taskflow::silent_emplace</a>, and <a class="el" href="classtf_1_1FlowBuilder.html#a468ddceae9c77728fbaef0f70d9fd11c" title="creates a task from a given callable object ">tf::Taskflow::emplace</a> to create a task.</p> |
| 102 | +<p>Cpp-Taskflow provides three methods, <a class="el" href="classtf_1_1FlowBuilder.html#acab0b4ac82260f47fdb36a3244ee3aaf" title="creates an empty task ">tf::Taskflow::placeholder</a>, <a class="el" href="classtf_1_1FlowBuilder.html#a7285613836c840e22b8511d447734c87" title="creates a task from a given callable object without access to the result ">tf::Taskflow::silent_emplace</a>, and <a class="el" href="classtf_1_1FlowBuilder.html#a468ddceae9c77728fbaef0f70d9fd11c" title="creates a task from a given callable object ">tf::Taskflow::emplace</a> to create a task.</p> |
103 | 103 | <div class="fragment"><div class="line">1: <span class="keyword">auto</span> A = taskflow.placeholder();</div><div class="line">2: <span class="keyword">auto</span> B = taskflow.silent_emplace([] () {});</div><div class="line">3: <span class="keyword">auto</span> [C, FuC] = taskflow.emplace([] () { <span class="keywordflow">return</span> 1; });</div></div><!-- fragment --><p>Debrief: </p><ul>
|
104 | 104 | <li>Line 1 creates an empty task </li>
|
105 | 105 | <li>Line 2 creates a task from a given callable object and returns a task handle </li>
|
@@ -141,7 +141,7 @@ <h1><a class="anchor" id="C1Example1"></a>
|
141 | 141 | <h1><a class="anchor" id="C1Example2"></a>
|
142 | 142 | Example 2: Modify Task Attributes</h1>
|
143 | 143 | <p>This example demonstrates how to modify a task's attributes using methods defined in the task handler.</p>
|
144 |
| -<div class="fragment"><div class="line"> 1: #include <taskflow/taskflow.hpp></div><div class="line"> 2:</div><div class="line"> 3: <span class="keywordtype">int</span> main() {</div><div class="line"> 4:</div><div class="line"> 5: <a class="code" href="classtf_1_1BasicTaskflow.html">tf::Taskflow</a> taskflow;</div><div class="line"> 6:</div><div class="line"> 7: <a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector<tf::Task></a> tasks = { </div><div class="line"> 8: taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#ac22f244fb2ec58809192faafa266c58c">placeholder</a>(), <span class="comment">// create a task with no work</span></div><div class="line"> 9: taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#ac22f244fb2ec58809192faafa266c58c">placeholder</a>() <span class="comment">// create a task with no work</span></div><div class="line">10: };</div><div class="line">11:</div><div class="line">12: tasks[0].name(<span class="stringliteral">"This is Task 0"</span>);</div><div class="line">13: tasks[1].name(<span class="stringliteral">"This is Task 1"</span>);</div><div class="line">14: tasks[0].precede(tasks[1]);</div><div class="line">15:</div><div class="line">16: <span class="keywordflow">for</span>(<span class="keyword">auto</span> task : tasks) { <span class="comment">// print out each task's attributes</span></div><div class="line">17: <a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << task.name() << <span class="stringliteral">": "</span></div><div class="line">18: << <span class="stringliteral">"num_dependents="</span> << task.num_dependents() << <span class="stringliteral">", "</span></div><div class="line">19: << <span class="stringliteral">"num_successors="</span> << task.num_successors() << <span class="charliteral">'\n'</span>;</div><div class="line">20: }</div><div class="line">21:</div><div class="line">22: taskflow.<a class="code" href="classtf_1_1BasicTaskflow.html#adac448e1cc44307856b3116d7ed5490f">dump</a>(<a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a>); <span class="comment">// dump the taskflow graph</span></div><div class="line">23:</div><div class="line">24: tasks[0].work([](){ <a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"got a new work!\n"</span>; });</div><div class="line">25: tasks[1].work([](){ <a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"got a new work!\n"</span>; });</div><div class="line">26:</div><div class="line">27: taskflow.<a class="code" href="classtf_1_1BasicTaskflow.html#a37ef86998f23ee7315be032c40fe815e">wait_for_all</a>();</div><div class="line">28:</div><div class="line">29: <span class="keywordflow">return</span> 0;</div><div class="line">30: }</div></div><!-- fragment --><p>The output of this program looks like the following:</p> |
| 144 | +<div class="fragment"><div class="line"> 1: #include <taskflow/taskflow.hpp></div><div class="line"> 2:</div><div class="line"> 3: <span class="keywordtype">int</span> main() {</div><div class="line"> 4:</div><div class="line"> 5: <a class="code" href="classtf_1_1BasicTaskflow.html">tf::Taskflow</a> taskflow;</div><div class="line"> 6:</div><div class="line"> 7: <a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector<tf::Task></a> tasks = { </div><div class="line"> 8: taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#acab0b4ac82260f47fdb36a3244ee3aaf">placeholder</a>(), <span class="comment">// create a task with no work</span></div><div class="line"> 9: taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#acab0b4ac82260f47fdb36a3244ee3aaf">placeholder</a>() <span class="comment">// create a task with no work</span></div><div class="line">10: };</div><div class="line">11:</div><div class="line">12: tasks[0].name(<span class="stringliteral">"This is Task 0"</span>);</div><div class="line">13: tasks[1].name(<span class="stringliteral">"This is Task 1"</span>);</div><div class="line">14: tasks[0].precede(tasks[1]);</div><div class="line">15:</div><div class="line">16: <span class="keywordflow">for</span>(<span class="keyword">auto</span> task : tasks) { <span class="comment">// print out each task's attributes</span></div><div class="line">17: <a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << task.name() << <span class="stringliteral">": "</span></div><div class="line">18: << <span class="stringliteral">"num_dependents="</span> << task.num_dependents() << <span class="stringliteral">", "</span></div><div class="line">19: << <span class="stringliteral">"num_successors="</span> << task.num_successors() << <span class="charliteral">'\n'</span>;</div><div class="line">20: }</div><div class="line">21:</div><div class="line">22: taskflow.<a class="code" href="classtf_1_1BasicTaskflow.html#adac448e1cc44307856b3116d7ed5490f">dump</a>(<a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a>); <span class="comment">// dump the taskflow graph</span></div><div class="line">23:</div><div class="line">24: tasks[0].work([](){ <a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"got a new work!\n"</span>; });</div><div class="line">25: tasks[1].work([](){ <a class="codeRef" doxygen="/home/twhuang/PhD/Code/cpp-taskflow/docs/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"got a new work!\n"</span>; });</div><div class="line">26:</div><div class="line">27: taskflow.<a class="code" href="classtf_1_1BasicTaskflow.html#a37ef86998f23ee7315be032c40fe815e">wait_for_all</a>();</div><div class="line">28:</div><div class="line">29: <span class="keywordflow">return</span> 0;</div><div class="line">30: }</div></div><!-- fragment --><p>The output of this program looks like the following:</p> |
145 | 145 | <div class="fragment"><div class="line">This is Task 0: num_dependents=0, num_successors=1</div><div class="line">This is Task 1: num_dependents=1, num_successors=0</div><div class="line">digraph Taskflow {</div><div class="line">"This is Task 1";</div><div class="line">"This is Task 0";</div><div class="line">"This is Task 0" -> "This is Task 1";</div><div class="line">}</div><div class="line">got a new work!</div><div class="line">got a new work!</div></div><!-- fragment --><p>Debrief: </p><ul>
|
146 | 146 | <li>Line 5 creates a taskflow object </li>
|
147 | 147 | <li>Line 7-10 creates two tasks with empty target and stores the corresponding task handles in a vector </li>
|
|
0 commit comments