diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/producer_8cpp_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/producer_8cpp_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,135 @@ + + + + +TB9.2 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 by  + +doxygen 1.6.2
+ +