--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/ThreadLibrary/CAThread.windows.cpp Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* System Includes
+*
+*/
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+/*******************************************************************************
+ *
+ * Local Includes
+ *
+ ******************************************************************************/
+#include "CAThread.h"
+
+/*******************************************************************************
+ *
+ * Implementation
+ *
+ ******************************************************************************/
+CAThread::CAThread()
+{
+ iThreadHandle = NULL;
+ iThreadState = TS_INIT;
+ iProc = NULL;
+}
+
+
+CAThread::CAThread( string aThreadName )
+{
+ iThreadHandle = NULL;
+ iThreadState = TS_INIT;
+ iProc = NULL;
+ iThreadName = aThreadName;
+}
+
+
+CAThread::~CAThread()
+{
+ assert( iThreadHandle == NULL );
+ assert( iThreadState != TS_ACTIVE );
+}
+
+
+TThreadError CAThread::StartThread( void *aStartProc, void *aArg, int *aSystemSpecificError )
+{
+ // check params
+ assert( aSystemSpecificError != NULL );
+ *aSystemSpecificError = 0;
+
+ // create the thread
+ iThreadHandle = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)aStartProc, aArg, 0, NULL );
+ iProc = aStartProc;
+
+ // handle errors
+ if( iThreadHandle == NULL ) {
+ *aSystemSpecificError = GetLastError();
+ return TE_ERROR;
+ }
+
+ // done
+ iThreadState = TS_ACTIVE;
+ return TE_NONE;
+}
+
+
+TThreadError CAThread::WaitForThread( int aTimeout )
+{
+ int err;
+
+ // wait for the object
+ err = WaitForSingleObject( iThreadHandle, aTimeout );
+
+ // handle the case that we got it
+ if( err == WAIT_OBJECT_0 ) {
+ iThreadState = TS_DONE;
+ iThreadHandle = NULL;
+ return TE_NONE;
+ }
+
+ // handle a timeout
+ if( err == WAIT_TIMEOUT ) {
+ return TE_TIMEOUT;
+ }
+
+ // handle all other responses
+ assert( !"INVALID CODE PATH" );
+ return TE_NONE;
+}
+
+
+TThreadState CAThread::GetThreadState()
+{
+ return iThreadState;
+}