summaryrefslogtreecommitdiff
path: root/docs/tutorials/021/page03.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tutorials/021/page03.html')
-rw-r--r--docs/tutorials/021/page03.html146
1 files changed, 0 insertions, 146 deletions
diff --git a/docs/tutorials/021/page03.html b/docs/tutorials/021/page03.html
deleted file mode 100644
index e2d6e0bf117..00000000000
--- a/docs/tutorials/021/page03.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
- <META NAME="Author" CONTENT="James CE Johnson">
- <TITLE>ACE Tutorial 021</TITLE>
-</HEAD>
-<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#000FFF" VLINK="#FF0F0F">
-
-<CENTER><B><FONT SIZE=+2>ACE Tutorial 021</FONT></B></CENTER>
-
-<CENTER><B><FONT SIZE=+2>Pooling your memories</FONT></B></CENTER>
-
-<P>
-<HR WIDTH="100%">
- The client side is a little simpler than the server. Mainly
- because we don't try to delete the pool:
- <ul>
- <li>Create an Allocator to access the pool
- <li>Find the named region
- </ul>
-<hr>
-<PRE>
-
-<font color=red>// $Id$</font>
-
-<font color=blue>#include</font> "<font color=green>mpool.h</font>"
-
-<font color=blue>#if defined</font>(<font color=purple>ACE_LACKS_SYSV_SHMEM</font>)
-int
-main (int, char *[])
-{
- ACE_ERROR_RETURN ((LM_ERROR,
- "<font color=green>System V Semaphores not available on this platform.\n</font>"),100);
-}
-#else <font color=red>// ACE_LACKS_SYSV_SHMEM</font>
-int
-main (int, char *[])
-{
- <font color=red>/*
- Use the same pool name used by the server when we create our
- Allocator. This assures us that we don't create a whole new
- pool.
- */</font>
- Allocator allocator (<font color=#008888>Constants::PoolName</font>);
-
- <font color=red>/*
- You can put anything in the memory pool. Not just the
- character array we want. The find() method till, therefore,
- return a void* that we will have to cast.
- */</font>
- void *region;
-
- <font color=red>/*
- We use find() to locate a named region in the pool. This is
- the counterpart to bind() used in the server.
- Here, we go try to find the region that the server has created
- and filled with data. If there was a problem getting the pool
- or finding the region, we'll get back -1 from find().
- */</font>
- if (allocator.pool ().find (<font color=#008888>Constants::RegionName</font>,region) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- "<font color=green>Cannot find the name '%s'\n</font>",
- <font color=#008888>Constants::RegionName</font>),
- 100);
-
- <font color=red>/*
- Since find() returns us a void*, we cast it here to the char*
- that we want.
- */</font>
- char *shm = (char *) region;
-
- ACE_DEBUG ((LM_INFO,
- "<font color=green>Shared memory is at 0x%x\n</font>",
- shm));
-
- <font color=red>/*
- The same pair of semaphores as used by the server are created
- here. We probably don't need the CREATE flag since the server
- should have already done that. There may be some very small
- windows, however, where the server would have created the
- memory pool but not yet gotten to the semaphores.
- */</font>
- ACE_SV_Semaphore_Complex mutex;
- ACE_ASSERT (mutex.open (<font color=#008888>Constants::SEM_KEY_1</font>,
- <font color=#008888>ACE_SV_Semaphore_Complex::ACE_CREATE</font>,
- 0) != -1);
-
- ACE_SV_Semaphore_Complex synch;
- ACE_ASSERT (synch.open (<font color=#008888>Constants::SEM_KEY_2</font>,
- <font color=#008888>ACE_SV_Semaphore_Complex::ACE_CREATE</font>,
- 0) != -1);
-
- <font color=red>/*
- It doesn't matter if we created 'mutex' or if the server did.
- In either case, it was created in a locked state and we will
- block here until somebody unlocks it. In our scenario, that
- will have to be the server.
- */</font>
- if (mutex.acquire () == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- "<font color=green>(%P) client mutex.acquire</font>"),
- 1);
-
- <font color=red>/*
- Now that we know it is safe to access the data, we'll run
- through and make sure that it contains what we think the server
- supplied.
- */</font>
- for (int i = 0; i &lt; <font color=#008888>Constants::SHMSZ</font>; i++)
- ACE_ASSERT (<font color=#008888>Constants::SHMDATA</font>[i] == shm[i]);
-
- <font color=red>/*
- Look back at the server. After filling the region, it will
- attempt to acquire the lock on 'synch'. It will wait there
- until we release() the semaphore. That will allow it to remove
- the pool and cleanup. We can simply exit once we perform the
- release. (Ok, a free() of the region would probably be polite...)
- */</font>
- if (synch.release () == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- "<font color=green>(%P) client synch.release</font>"),
- 1);
-
- return 0;
-}
-
-<font color=red>/*
- Again, we have the necessary explicit template instantiations
- because I based this on an ACE example instead of creating it from scratch.
- */</font>
-<font color=blue>#if defined</font> (<font color=purple>ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION</font>)
-template class ACE_Malloc&lt;ACE_MMAP_MEMORY_POOL, ACE_SV_Semaphore_Simple>;
-template class ACE_Guard&lt;ACE_SV_Semaphore_Simple>;
-template class ACE_Write_Guard&lt;ACE_SV_Semaphore_Simple>;
-template class ACE_Read_Guard&lt;ACE_SV_Semaphore_Simple>;
-<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_Malloc&lt;ACE_MMAP_MEMORY_POOL, ACE_SV_Semaphore_Simple>
-<font color=blue>#pragma</font> <font color=purple>instantiate</font> ACE_Guard&lt;ACE_SV_Semaphore_Simple>
-<font color=blue>#pragma</font> <font color=purple>instantiate</font> ACE_Write_Guard&lt;ACE_SV_Semaphore_Simple>
-<font color=blue>#pragma</font> <font color=purple>instantiate</font> ACE_Read_Guard&lt;ACE_SV_Semaphore_Simple>
-<font color=blue>#endif</font> <font color=red>/* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */</font>
-
-<font color=blue>#endif</font> <font color=red>/* ACE_LACKS_SYSV_SHMEM */</font>
-</PRE>
-<P><HR WIDTH="100%">
-<CENTER>[<A HREF="../online-tutorials.html">Tutorial Index</A>] [<A HREF="page04.html">Continue This Tutorial</A>]</CENTER>