# examples/Base/ThreadsAndProcesses/Rendezvous/ThreadRendezvous.cpp

    00001 // Copyright (c) 2007-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 // Example to demonstrate the use of Rendezvous() with threads
    00015 //
    00016
    00017 #include "CommonFramework.h"
    00018 #include <e32math.h>
    00019
    00020 //
    00021 // Common literal text
    00022 //
    00023
    00024
    00025 _LIT(KMsgMyThreadName, "MyThread");
    00026 _LIT(KMsgStartThread, "Start thread\n");
    00027 _LIT(KMsgThreadRendezvousReached,"Thread rendezvous reached\n");
    00028 _LIT(KMsgEndOfTest,"End of test\n");
    00029 _LIT(KMsgSomethingIsWrong, "Something is wrong\n");
    00030 _LIT(KMsgCreateThreadFailed, "Create thread failed\n");
    00031
    00032 //Define
    00033 const TInt KHeapSize = 0x2000;
    00034
    00035 //************************************************************
    00036 // Declare Thread functions
    00037 //************************************************************
    00038 TInt MyThread(TAny* aParameter)
    00039         {
    00040                 // simulate some processing
    00041         User::After((TInt)aParameter);
    00042
    00043                         // signal Rendezvous
    00044         RThread::Rendezvous(KErrNone);
    00045
    00046                 // simulate some processing
    00047         User::After((TInt)aParameter);
    00048
    00049         return(KErrNone);
    00050         }
    00051
    00052 //************************************************************
    00053 // Main example code function
    00054 //************************************************************
    00055 LOCAL_C void doExampleL()
    00056         {
    00057                 // create threads to wait for
    00058         RThread thread;
    00059
    00060                 // indicate completion status
    00061         TRequestStatus myThreadRendezvousStatus;
    00062
    00063                 // pass 500 as the parameter to MyThread
    00064         TInt r=thread.Create(KMsgMyThreadName, MyThread, KDefaultStackSize, KHeapSize,KHeapSize,(TAny*) 2000000, EOwnerThread);
    00065         if (r!=KErrNone)
    00066                 {
    00067                 console->Printf(KMsgCreateThreadFailed);
    00068                 return;
    00069                 }
    00070                 // create rendezvous
    00071         thread.Rendezvous(myThreadRendezvousStatus);
    00072
    00073                 //EXCECUTE THREAD!
    00074         console->Printf(KMsgStartThread);
    00075         thread.Resume();
    00076
    00077         User::WaitForRequest(myThreadRendezvousStatus);
    00078         if(myThreadRendezvousStatus==KErrNone)
    00079                 {
    00080                 console->Printf(KMsgThreadRendezvousReached);
    00081                 }
    00082                 else
    00083                 {
    00084                 console->Printf(KMsgSomethingIsWrong);
    00085                 }
    00086
    00087         thread.Close();
    00088         console->Printf(KMsgEndOfTest);
    00089
    00090         }
    00091
    00092
    00093
    00094
    00095
    00096
    00097
    00098