diff options
Diffstat (limited to 'docs/tutorials/013/page02.html')
-rw-r--r-- | docs/tutorials/013/page02.html | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/docs/tutorials/013/page02.html b/docs/tutorials/013/page02.html deleted file mode 100644 index 39cfd5daf5f..00000000000 --- a/docs/tutorials/013/page02.html +++ /dev/null @@ -1,123 +0,0 @@ -<!-- $Id$ --> -<HTML> -<HEAD> - <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> - <META NAME="Author" CONTENT="James CE Johnson"> - <TITLE>ACE Tutorial 013</TITLE> -</HEAD> -<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#000FFF" VLINK="#FF0F0F"> - -<CENTER><B><FONT SIZE=+2>ACE Tutorial 013</FONT></B></CENTER> - -<CENTER><B><FONT SIZE=+2>Multiple thread pools</FONT></B></CENTER> - - -<P> -<HR WIDTH="100%"> -<P> -We'll go back to our tradition of looking at main() first. The only -change here from our "normal" thread pool is the ability to specify -the number of subtasks for the pool. (Each subtask is another thread -pool in the chain. I suppose I should have named that better...) -I've still got the custom Message_Block so that, at this level, we -don't even know about custom Data_Blocks. -<P> -<HR WIDTH="100%"> -<PRE> - -<font color=red>// $Id$</font> - -<font color=blue>#include</font> "<font color=green>mld.h</font>" -<font color=blue>#include</font> "<font color=green>task.h</font>" -<font color=blue>#include</font> "<font color=green>work.h</font>" -<font color=blue>#include</font> "<font color=green>block.h</font>" - -int run_test (int iterations, int threads, int subtasks) -{ - <font color=red>// Create a task with some subtasks. Each Task is a thread</font> - <font color=red>// pool of 'threads' size. If a task has a subtask, it will</font> - <font color=red>// forward the unit of work to the subtask when finished. See </font> - <font color=red>// task.{h|cpp} for more details.</font> - Task *task = new Task (subtasks); - - if (task->start (threads) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, "<font color=green>%p\n</font>", "<font color=green>start</font>"), -1); - } - - <font color=red>// Give the threads a chance to get ready.</font> - <font color=#008888>ACE_OS::sleep</font> (ACE_Time_Value (1)); - - for (int i = 0; i < iterations; ++i) - { - <font color=red>// Create a custom message block that can contain our Work object</font> - Message_Block *message = new Message_Block (new Work (i)); - - <font color=red>// Put the "<font color=green>unit of work</font>" into the message queue</font> - if (task->putq (message) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, "<font color=green>%p\n</font>", "<font color=green>putq</font>"), -1); - } - } - - <font color=red>// The default constructor of our custom message block will</font> - <font color=red>// insert a message telling our task to shutdown.</font> - Message_Block *message = new Message_Block (); - - <font color=red>// Put the shutdown request into the thread pool</font> - if (task->putq (message) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, "<font color=green>%p\n</font>", "<font color=green>putq</font>"), -1); - } - - <font color=red>// Wait for the task to shut down. Any subtasks will also be</font> - <font color=red>// waited for.</font> - task->wait (); - - <font color=red>// Delete our Task to prevent a memory leak</font> - delete task; - - <font color=red>// Ask our memory leak detector if things are OK</font> - if (MLD_COUNTER != 0) - { - ACE_DEBUG ((LM_DEBUG, "<font color=green>(%P|%t) Memory Leak! (counter = %d)\n</font>",MLD_COUNTER)); - } - - return (0); -} - -int main (int argc, char *argv[]) -{ - <font color=red>// Number of Work objects to put into the Task pool</font> - int iterations = argc > 1 ? atoi (argv[1]) : 4; - <font color=red>// Number of threads for each Task</font> - int threads = argc > 2 ? atoi (argv[2]) : 2; - <font color=red>// Number of tasks to chain after the primary task</font> - int subtasks = argc > 3 ? atoi (argv[3]) : 1; - - (void) run_test (iterations, threads, subtasks); - - ACE_DEBUG ((LM_DEBUG, "<font color=green>(%P|%t) Application exiting\n</font>")); - - return (0); -} -<font color=blue>#if defined</font> (<font color=purple>ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION</font>) -template class ACE_Guard < ACE_Mutex >; -template class ACE_Lock_Adapter < ACE_Mutex >; -template class ACE_Atomic_Op < ACE_Mutex, int >; -<font color=blue>#elif defined</font> (<font color=purple>ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA</font>) -<font color=blue>#pragma</font> <font color=purple>instantiate</font> ACE_Guard<ACE_Mutex>; -<font color=blue>#pragma</font> <font color=purple>instantiate</font> ACE_Lock_Adapter<ACE_Mutex>; -<font color=blue>#pragma</font> <font color=purple>instantiate</font> ACE_Atomic_Op<ACE_Mutex, int>; -<font color=blue>#endif</font> <font color=red>/* - ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION - */</font> -</PRE> -<HR WIDTH="100%"> -<P> -Nothing really surprising here... Just remember that your total -number of threads is ( ( 1 + subtasks ) * threads ). You probably -don't want to get too carried away with that! -<P> -<P><HR WIDTH="100%"> -<CENTER>[<A HREF="../online-tutorials.html">Tutorial Index</A>] [<A HREF="page03.html">Continue This Tutorial</A>]</CENTER> |