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

examples/Base/IPC/condvar/condvarlocal/src/producer.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 CProducer class.
-00015 //
-00016 
-00017 
-00018 
-00023 #include "producer.h"
-00024 
-00031 CProducer* CProducer::NewL(CConsoleBase* aConsole,CQueue* aTokens)
-00032         {
-00033         CProducer* self = new (ELeave)CProducer;
-00034         CleanupStack::PushL(self);
-00035         self->ConstructL(aConsole,aTokens);
-00036         CleanupStack::Pop(self);
-00037         return self;
-00038         }
-00039 
-00051 void CProducer::ConstructL(CConsoleBase* aConsole,CQueue* aTokens)
-00052         {
-00053         iConsole = aConsole;
-00054         iQueue = aTokens;
-00055 
-00056         // Create an object of the CPeriodic class.
-00057         iPeriodicProd = CPeriodic::NewL(CActive::EPriorityUserInput);
-00058 
-00059         // Create the producer thread.
-00060         _LIT(KProducer,"ProducerThread");
-00061         User::LeaveIfError(iProdThread.Create(KProducer,ProdThreadFunc,KDefaultStackSize,KMinHeapSize,256*KMinHeapSize,iQueue,EOwnerThread));
-00062         iProdThread.SetPriority(EPriorityMore);
-00063 
-00064         // The producer thread invokes the InsertFunction() function every two seconds.
-00065         // Associate InsertFunction() as the call back function for the iPeriodicCons object.
-00066         iPeriodicProd->Start(0,3000000,TCallBack(InsertFunction,this));
-00067         }
-00068 
-00072 CProducer::CProducer()
-00073         {
-00074         }
-00075 
-00079 void CProducer::Display()
-00080         {
-00081         RArray<TInt> array;
-00082         // Initialize the array.
-00083         // The array reflects the contents of the CQueue queue.
-00084         iQueue->GetTokens(array);
-00085         // Print the array.
-00086         iConsole->Printf(KNewLine);
-00087         _LIT(KTextQueue,"Queue Contents:\n[  ");
-00088         iConsole->Printf(KTextQueue);
-00089 
-00090         _LIT(KTextIntFormat,"%d  ");
-00091 
-00092         for(TInt ix = 0 ; ix < array.Count() ; ix++)
-00093                 {
-00094                 iConsole->Printf(KTextIntFormat,array[ix]);
-00095                 }
-00096 
-00097         _LIT(KTextQueueEnd,"]");
-00098         iConsole->Printf(KTextQueueEnd);
-00099         iConsole->Printf(KNewLine);
-00100         iConsole->Printf(KNewLine);
-00101         array.Close();
-00102         }
-00103 
-00109 TInt CProducer::ProdThreadFunc(TAny* aPtr)
-00110         {
-00111         // The while loop mechanism ensures that the thread performs the CQueue::Insert() operation each time RThread::Resume() is invoked on the thread handle.
-00112         while(true)
-00113                 {
-00114                 CQueue* ptr = (CQueue*)aPtr;
-00115                 __ASSERT_ALWAYS(ptr,User::Panic(KTxtPanic,-1));
-00116                 // Insert a token into the queue.
-00117                 ptr->Insert();
-00118                 // Suspend the thread.
-00119                 RThread().Suspend();
-00120                 }
-00121         return KErrNone;
-00122         }
-00123 
-00127 void CProducer::ResumeProd()
-00128         {
-00129         // Call the RThread::Resume() function on the producer thread.
-00130         // Control goes to the CProducer::ProdThreadFunc() function after this statement.
-00131         iProdThread.Resume();
-00132         }
-00133 
-00137 void CProducer::Produce()
-00138         {
-00139         // Call the CQueue::Insert() function.
-00140         iQueue->Insert();
-00141         }
-00142 
-00146 CProducer::~CProducer()
-00147         {
-00148         iProdThread.Kill(KErrCancel);
-00149         delete iPeriodicProd;
-00150         }
-00151 
-00152 
-00158 TInt CProducer::InsertFunction(TAny* aPtr)
-00159         {
-00160         CProducer* ptr = static_cast<CProducer*> (aPtr);
-00161         __ASSERT_ALWAYS(ptr,User::Panic(KTxtPanic,-1));
-00162         // Invoke the RThread::Resume() function on the producer thread repeatedly.
-00163         ptr->ResumeProd();
-00164         return KErrNone;
-00165         }
-

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