testexecmgmt/ucc/Source/ThreadLibrary/CAThread.windows.cpp
changeset 0 3da2a79470a7
--- /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;
+}