diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/Source/ThreadLibrary/CAThread.windows.cpp --- /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 +#include +#include + +/******************************************************************************* + * + * 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; +}