You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.8 KiB
61 lines
1.8 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//
|
||
|
//=============================================================================//
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Redirector - to redirect the input / output of a console
|
||
|
//
|
||
|
// Developer: Jeff Lee
|
||
|
// Dec 10, 2001
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#if !defined(AFX_REDIR_H__4FB57DC3_29A3_11D5_BB60_006097553C52__INCLUDED_)
|
||
|
#define AFX_REDIR_H__4FB57DC3_29A3_11D5_BB60_006097553C52__INCLUDED_
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif // _MSC_VER > 1000
|
||
|
|
||
|
class CRedirector
|
||
|
{
|
||
|
public:
|
||
|
CRedirector();
|
||
|
virtual ~CRedirector();
|
||
|
|
||
|
protected:
|
||
|
HANDLE m_hThread; // thread to receive the output of the child process
|
||
|
HANDLE m_hEvtStop; // event to notify the redir thread to exit
|
||
|
DWORD m_dwThreadId; // id of the redir thread
|
||
|
DWORD m_dwWaitTime; // wait time to check the status of the child process
|
||
|
|
||
|
HANDLE m_hStdinWrite; // write end of child's stdin pipe
|
||
|
HANDLE m_hStdoutRead; // read end of child's stdout pipe
|
||
|
HANDLE m_hChildProcess;
|
||
|
|
||
|
BOOL LaunchChild(LPCTSTR pszCmdLine, LPCTSTR pszCurrentDirectory,
|
||
|
HANDLE hStdOut, HANDLE hStdIn, HANDLE hStdErr);
|
||
|
int RedirectStdout();
|
||
|
void DestroyHandle(HANDLE& rhObject);
|
||
|
|
||
|
static DWORD WINAPI OutputThread(LPVOID lpvThreadParam);
|
||
|
|
||
|
protected:
|
||
|
// overrides:
|
||
|
virtual void WriteStdOut(LPCSTR pszOutput);
|
||
|
virtual void WriteStdError(LPCSTR pszError);
|
||
|
|
||
|
public:
|
||
|
BOOL Open(LPCTSTR pszCmdLine, LPCTSTR pszCurrentDirectory = NULL);
|
||
|
virtual void Close();
|
||
|
BOOL Printf(PRINTF_FORMAT_STRING LPCTSTR pszFormat, ...);
|
||
|
|
||
|
void SetWaitTime(DWORD dwWaitTime) { m_dwWaitTime = dwWaitTime; }
|
||
|
};
|
||
|
|
||
|
#endif // !defined(AFX_REDIR_H__4FB57DC3_29A3_11D5_BB60_006097553C52__INCLUDED_)
|