Mercurial > flash_v2
diff host/tools/Utils/win32/SubProcess.h @ 76:435cced73e2f ecos-v1_3_1-release
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
| author | jlarmour |
|---|---|
| date | Tue, 28 Mar 2000 14:10:45 +0000 |
| parents | |
| children |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/host/tools/Utils/win32/SubProcess.h @@ -0,0 +1,131 @@ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This program is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): sdf +// Contact(s): sdf +// Date: 1998/08/11 +// Version: 0.01 +// Purpose: +// Description: Interface of the subprocess clas +// Requires: +// Provides: +// See also: +// Known bugs: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== +#ifndef _SUBPROCESS_H +#define _SUBPROCESS_H + +#define WM_SUBPROCESS (WM_USER+42) + +#include "eCosStd.h" +#include "Collections.h" + +class CSubprocess { + // Class to spawn subprocesses. + +public: + + // ctors and dtors. Nothing exciting here. + CSubprocess(bool bVerbose=false); + virtual ~CSubprocess(); + + // Get the process exit code. This can be: + // exit code of process (if terminated) + // 0xffffffff (if process not yet run) + // GetLastError result (if process could not be run) + DWORD GetExitCode() { return m_dwExitCode; } + + // Close the process's stdin + void CloseInput(); + + // Various forms of the Run function. In each case the result is the process ID created (0 if failure) + + // Run a process (blocking) + unsigned int Run(String &strOutput,LPCTSTR pszCmd,LPCTSTR pszDir=_T("")); +#ifdef _WIN32 + // Run a process (non-blocking): caller gets WM_SUBPROCESS messages: + // wParam is the this pointer, lParam is text string [for process output] + // which callee deletes, or 0 [for process completion] + unsigned int Run(HWND hwndParent, LPCTSTR pszCmd,LPCTSTR pszDir=_T("")); // post messages to given window + unsigned int Run(DWORD dwParentThreadId,LPCTSTR pszCmd,LPCTSTR pszDir=_T("")); // post messages to given thread +#endif + + // Run (non-blocking and discarding output) + static unsigned int Run(LPCTSTR pszCmd,LPCTSTR pszDir=_T("")); + + // Run (blocking and sending output to callback) + unsigned int Run(LogFunc *pfnLog,void * pLogparam,LPCTSTR pszCmd,LPCTSTR pszDir=_T("")); + + // Kill the process: + bool Kill(); + + // Kill the process and its children the Cygwin way (requires ps and kill) + void CygKill(); + + // Send some input to the process: + void Send (LPCTSTR psz); + +protected: + LogFunc *m_pfnLogfunc; + void *m_pLogparam; + bool m_bAutoDelete; + DWORD m_dwExitCode; + static const UINT PROCESS_KILL_EXIT_CODE; + bool m_bVerbose; + bool m_bThreadRunning; + HANDLE m_hrPipe; + HANDLE m_hwPipe; + unsigned int CreateProcess(); + + struct CygProcessInfo { + int nPid; + int nPpid; + int nPgid; + int nWinpid; + }; + + String * m_pstrOutput; + HANDLE m_hThread; + void Post (LPARAM lParam); + DWORD m_idProcess; + + HANDLE m_hProcess; + void Output(LPCTSTR psz); + String m_strCmd,m_strDir; +#ifdef _WIN32 + HWND m_hwndParent; +#endif + DWORD m_dwParentThreadId; + static DWORD WINAPI ThreadFunc(LPVOID pParam) { return ((CSubprocess *)pParam)->ThreadFunc(); } + DWORD ThreadFunc(); +}; + +#endif
