diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_run_complete_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_run_complete_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,240 @@ + + +TB10.1 Example Applications: examples/Base/IPC/Async/RunComplete/RunComplete.cpp Source File + + + + +

examples/Base/IPC/Async/RunComplete/RunComplete.cpp

00001 // Copyright (c) 2000-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 // Demonstrates asynchronous keyboard processing with messenger program.
+00015 // Uses a single CMessageTimer active object which runs until completion.
+00016 //
+00017 
+00018 #include "CommonFramework.h"
+00019 
+00020 // panics
+00021 enum
+00022         {
+00023         EPanicAlreadyActive=1000,
+00024         };
+00025 
+00026 
+00028 //
+00029 // -----> CTimedMessenger (definition)
+00030 //
+00032 class CTimedMessenger : public CTimer
+00033         {
+00034 public:
+00035           // Construction
+00036         CTimedMessenger();
+00037       // Destruction
+00038         ~CTimedMessenger();
+00039 
+00040 public:
+00041           // Static construction
+00042         static CTimedMessenger* NewLC(const TDesC& aGreeting,
+00043                                           TInt aTicksRequested,
+00044                                                                   TInt aTicksInterval
+00045                                                                  );
+00046         static CTimedMessenger* NewL(const TDesC& aGreeting,
+00047                                          TInt aTicksRequested,
+00048                                                                  TInt aTicksInterval
+00049                                                                 );
+00050 
+00051 public:
+00052           // Second phase construction
+00053         void ConstructL(const TDesC& aGreeting,
+00054                             TInt aTicksRequested,
+00055                                         TInt aTicksInterval
+00056                                    );
+00057 
+00058           // issue request
+00059         void IssueRequest(); 
+00060 
+00061           // Cancel request
+00062           // Defined as pure virtual by CActive;
+00063           // implementation provided by this class.
+00064         void DoCancel();
+00065 
+00066           // service completed request.
+00067           // Defined as pure virtual by CActive;
+00068           // implementation provided by this class.
+00069         void RunL();
+00070 
+00071 public:
+00072           // data members defined by this class
+00073         TBufC<20> iGreeting;   // Text of the greeting.
+00074         TInt iTicksRequested;  // Total number of greetings CTimedMessenger
+00075                                // will emit.
+00076         TInt iTicksInterval;   // Number of seconds between each greeting.
+00077         TInt iTicksDone;       // Number of greetings issued so far.
+00078         };
+00079 
+00080 
+00082 //
+00083 // -----> CExampleScheduler (definition)
+00084 //
+00086 class CExampleScheduler : public CActiveScheduler
+00087         {
+00088 public:
+00089         void Error (TInt aError) const;
+00090         };
+00091 
+00092 
+00094 //
+00095 // -----> CTimedMessenger (implementation)
+00096 //
+00098 CTimedMessenger::CTimedMessenger()
+00099         : CTimer(CActive::EPriorityStandard)
+00100           // Construct standard-priority active object
+00101         {};
+00102 
+00103 CTimedMessenger* CTimedMessenger::NewLC(const TDesC& aGreeting,
+00104                                                                                 TInt aTicksRequested,
+00105                                                                                 TInt aTicksInterval
+00106                                                                            )
+00107         {
+00108         CTimedMessenger* self=new (ELeave) CTimedMessenger;
+00109         CleanupStack::PushL(self);
+00110         self->ConstructL(aGreeting,aTicksRequested,aTicksInterval);
+00111         return self;
+00112         }
+00113 
+00114 CTimedMessenger* CTimedMessenger::NewL(const TDesC& aGreeting,
+00115                                                                    TInt aTicksRequested,
+00116                                                                            TInt aTicksInterval
+00117                                                                           )
+00118         {
+00119         CTimedMessenger* self = NewLC(aGreeting,aTicksRequested,aTicksInterval);
+00120         CleanupStack::Pop();
+00121         return self;
+00122         }
+00123 
+00124 void CTimedMessenger::ConstructL(const TDesC& aGreeting,
+00125                                                                  TInt aTicksRequested,
+00126                                                                  TInt aTicksInterval
+00127                                                                 )
+00128         {
+00129           // Base class second-phase construction.
+00130         CTimer::ConstructL();
+00131           // Set members from arguments
+00132         iGreeting       = aGreeting;       // Set greeting text.
+00133         iTicksRequested = aTicksRequested; // Ticks requested
+00134         iTicksInterval  = aTicksInterval;  // Interval between ticks
+00135           // Add active object to active scheduler
+00136         CActiveScheduler::Add(this); 
+00137         }
+00138 
+00139 
+00140 CTimedMessenger::~CTimedMessenger()
+00141         {
+00142           // Make sure we're cancelled
+00143         Cancel();
+00144         }
+00145 
+00146 void CTimedMessenger::DoCancel()
+00147         {
+00148           // Base class
+00149         CTimer::DoCancel(); 
+00150           // Reset this variable - needed if the object is re-activated later
+00151         iTicksDone = 0;
+00152           // Tell user
+00153         _LIT(KMsgCancelled,"Outstanding Messenger request cancelled\n");
+00154         console->Printf(KMsgCancelled); 
+00155         }
+00156 
+00157 void CTimedMessenger::IssueRequest()
+00158         {
+00159           // There should never be an outstanding request at this point.
+00160         _LIT(KMsgAlreadyActive,"Is already Active");
+00161         __ASSERT_ALWAYS(!IsActive(),User::Panic(KMsgAlreadyActive,EPanicAlreadyActive));
+00162           // Request another wait
+00163         CTimer::After( iTicksInterval*1000000);
+00164         }
+00165 
+00166 void CTimedMessenger::RunL()
+00167         {
+00168           // Handle request completion
+00169           // One more tick done
+00170         iTicksDone++;
+00171           // Print greeting
+00172         _LIT(KFormatString,"%S \n");
+00173         console->Printf(KFormatString,&iGreeting);
+00174           // Issue new request, or stop if we have reached the limit
+00175         if (iTicksDone  < iTicksRequested)
+00176                 {
+00177                 IssueRequest();
+00178                 }
+00179         else
+00180                 {
+00181                 _LIT(KMsgFinished,"Messenger finished \n");
+00182                 console->Printf(KMsgFinished);
+00183                   // Reset this variable - needed if the object is re-activated later
+00184                 iTicksDone=0;
+00185                   // Can now stop the active scheduler
+00186                 CActiveScheduler::Stop();
+00187                 }
+00188         }
+00189 
+00190 
+00192 //
+00193 // -----> CExampleScheduler (implementation)
+00194 //
+00196 void CExampleScheduler::Error(TInt aError) const
+00197         {
+00198         _LIT(KMsgSchedErr,"CExampleScheduler-error");
+00199         User::Panic(KMsgSchedErr,aError);
+00200         }
+00201 
+00202 
+00204 //
+00205 // Do the example
+00206 //
+00208 LOCAL_C void doExampleL()
+00209     {
+00210           // Construct and install the active scheduler
+00211         CExampleScheduler*  exampleScheduler = new (ELeave) CExampleScheduler;
+00212 
+00213           // Push onto the cleanup stack
+00214         CleanupStack::PushL(exampleScheduler);
+00215 
+00216           // Install as the active scheduler
+00217         CActiveScheduler::Install(exampleScheduler); 
+00218 
+00219       // Create a CTimedMessenger active object which will emit 3 messages
+00220           // with an interval of 2 seconds between messages
+00221         _LIT(KMsgExplanation,"A single CMessageTimer active object which runs until completion\n\n");
+00222         console->Printf(KMsgExplanation);
+00223         _LIT(KMsgGoodMorning,"Good Morning!");
+00224         CTimedMessenger* myTimedMessage = CTimedMessenger::NewLC(KMsgGoodMorning,3,2);
+00225 
+00226           // Issue the first request
+00227         myTimedMessage->IssueRequest();
+00228 
+00229       // Main part of program is a wait loop
+00230           // This function completes when the scheduler stops
+00231         CActiveScheduler::Start();
+00232 
+00233           // Remove from the cleanup stack and destroy:
+00234           // 1. the CTimedMessenger active object
+00235           // 2. exampleScheduler
+00236         CleanupStack::PopAndDestroy(2); 
+00237         }
+00238 
+

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