diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/queue_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/queue_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ - - -TB10.1 Example Applications: examples/Base/IPC/condvar/condvarlocal/src/queue.cpp Source File - - - - -

examples/Base/IPC/condvar/condvarlocal/src/queue.cpp

Go to the documentation of this file.
00001 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-00002 // All rights reserved.
-00003 // This component and the accompanying materials are made available
-00004 // under the terms of "Eclipse Public License v1.0"
-00005 // which accompanies this distribution, and is available
-00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
-00007 //
-00008 // Initial Contributors:
-00009 // Nokia Corporation - initial contribution.
-00010 //
-00011 // Contributors:
-00012 //
-00013 // Description:
-00014 // Contains the definition of member functions of the CQueue class.
-00015 //
-00016 
-00017 
-00018 
-00023 #include "queue.h"
-00024 
-00029 CQueue* CQueue::NewL()
-00030         {
-00031         CQueue* self = new (ELeave)CQueue;
-00032         CleanupStack::PushL(self);
-00033         self->ConstructL();
-00034         CleanupStack::Pop(self);
-00035         return self;
-00036         }
-00037 
-00043 void CQueue::ConstructL()
-00044         {
-00045         // Create the local RMutex variable.
-00046         User::LeaveIfError(iMutex.CreateLocal());
-00047         // Create the local RCondVar variable.
-00048         User::LeaveIfError(iCondVar.CreateLocal());
-00049         }
-00050 
-00054 CQueue::CQueue()
-00055         {
-00056         }
-00057 
-00062 void CQueue::Insert()
-00063         {
-00064         // Wait for the mutex.
-00065         // The mutex is required to ensure that only one thread updates iArray at a time.
-00066         iMutex.Wait();
-00067         // Insertion operation.
-00068         // Insert some random number as a token into the queue.
-00069         iArray.Append(Math::Random()%10);
-00070         // Signal the local condition variable to indicate that queue has new data.
-00071         iCondVar.Signal();
-00072         // release the mutex so that the other thread has access to iArray.
-00073         iMutex.Signal();
-00074         // RCondVar::Broadcast() can be used as an alternative to the RCondVar::Signal() function.
-00075         // It is more relevant to use Broadcast() when more than two threads are blocking on single condition variable.
-00076         // The following code block illustrates the use of the Broadcast() function.
-00077         //
-00078         //if(!IsEmpty())
-00079         //      {
-00080         //      iCondVar.Broadcast();
-00081         //      iMutex.Signal();
-00082         //      }
-00083         //
-00084         }
-00085 
-00090 void CQueue::Remove()
-00091         {
-00092         // Ensures that mutex is held by the current thread.
-00093         iMutex.Wait();
-00094         // Test to see whether there is anything in the queue before attempting to remove an item.
-00095         // If the queue is empty wait for a signal on the Condition Variable before proceeding
-00096         while(!IsEmpty())
-00097                 {
-00098                 // The following call blocks this thread and releases the mutex so that the other thread can update the shared data.
-00099                 // When the other thread signals iCondVar and releases the mutex this thread continues.  
-00100                 iCondVar.Wait(iMutex);
-00101                 // If there were more than one consumer waiting for the same signal
-00102                 // it would be essential to test IsEmpty() again because another thread, or threads,
-00103                 // might have got the mutex before this one and emptied the array.
-00104                 // For this reason if is good practise to use while( IsEmpty() ) instead of if( IsEmpty() ).
-00105                 }
-00106         // Deletion operation.
-00107         iArray.Remove(0);
-00108         // Release the mutex.
-00109         iMutex.Signal();
-00110         }
-00111 
-00116 TBool CQueue::IsEmpty()
-00117         {
-00118         if(iArray.Count() > 0)
-00119                 {
-00120                 return ETrue;
-00121                 }
-00122         return EFalse;
-00123         }
-00124 
-00129 void CQueue::GetTokens(RArray<TInt>& aArray)
-00130         {
-00131         for(TInt ix = 0; ix < iArray.Count(); ix++)
-00132                 {
-00133                 aArray.Append(iArray[ix]);
-00134                 }
-00135         }
-00136 
-00140 CQueue::~CQueue()
-00141         {
-00142         iMutex.Close();
-00143         iCondVar.Close();
-00144         }
-

Generated on Thu Jan 21 10:32:56 2010 for TB10.1 Example Applications by  - -doxygen 1.5.3
- -