diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/Source/ProcessLibrary/proclib_windows.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecmgmt/ucc/Source/ProcessLibrary/proclib_windows.cpp Mon Mar 08 15:04:18 2010 +0800 @@ -0,0 +1,161 @@ +/* +* 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: +* Switches +* System Includes +* +*/ + + + +#include +#include +#include +#include +#include + +/******************************************************************************* + * + * Local Includes + * + ******************************************************************************/ +#include "proclib.h" + +/******************************************************************************* + * + * Definitions + * + ******************************************************************************/ + +/******************************************************************************* + * + * CAProcess + * + ******************************************************************************/ +CAProcess::CAProcess() +{ + memset( &iProcessInfo, 0, sizeof(iProcessInfo) ); + iProcessState = PS_INIT; +} + +CAProcess::~CAProcess() +{ +// assert( (iProcessState == PS_INIT) || (iProcessState == PS_REMOVED) ); +} + + +/******************************************************************************* + * + * StartProcess() + * + ******************************************************************************/ +int CAProcess::StartProcess( char *aCommandLine ) +{ + int err; + STARTUPINFO info; + + // check that the commandline is valid + assert( aCommandLine != NULL ); + + // verify the state + assert( iProcessState == PS_INIT ); + + // set the startup info to zero (required even though empty) + memset( &info, 0, sizeof(info) ); + info.cb = sizeof(info); + + // create the process + err = CreateProcess( NULL, aCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &info, &iProcessInfo ); + if( err == 0 ) { + assert( iProcessInfo.hProcess == NULL ); + return GetLastError(); + } + + // update the state + iProcessState = PS_STARTED; + + // done + return 0; +} + +/******************************************************************************* + * + * StopProcess() + * + ******************************************************************************/ +int CAProcess::StopProcess( ) +{ + int err, rv = 0; + + // check the state + assert( iProcessState == PS_STARTED ); + + // terminate the process + err = TerminateProcess( iProcessInfo.hProcess, -1 ); + if( err == 0 ) { + rv = GetLastError(); + } + + // update the state + iProcessState = PS_STOPPED; + return rv; +} + +/******************************************************************************* + * + * WaitForProcess() + * + ******************************************************************************/ +int CAProcess::WaitForProcess() +{ + int err, rv = 0; + + // check the state + assert( (iProcessState == PS_STOPPED) || (iProcessState == PS_STARTED) ); + + // now wait + err = WaitForSingleObject( iProcessInfo.hProcess, INFINITE ); + if( err != WAIT_OBJECT_0 ) { + rv = err; + } + + // update the state + iProcessState = PS_REMOVED; + return rv; +} + + +/******************************************************************************* + * + * GetProcessStatus() + * + ******************************************************************************/ +TProcessStatus CAProcess::GetProcessStatus() +{ + int err; + + // if the state is not started then return + if( iProcessState != PS_STARTED ) { + return iProcessState; + } + + // otherwise see if the process is still running or has stopped itself + err = WaitForSingleObject( iProcessInfo.hProcess, 0 ); + if( err != WAIT_TIMEOUT ) { + iProcessState = PS_STOPPED; + } + + // return the status + return iProcessState; +}