cd6ce4a90c
reliable), now works in both sync and async modes 2. wxSafeYieldBug() corrected, wxWindowDisabler which is now used in it added and documented 3. exec sample updated to illustrate capturing the subprocess output 4. wxStreamBase::IsOk() added 5. wxInputStream::Eof() added and non-blocking Eof() implementation in wxPipeInputStream used by wxExecute git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6400 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
99 lines
2.8 KiB
C++
99 lines
2.8 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: process.h
|
|
// Purpose: wxProcess class
|
|
// Author: Guilhem Lavaux
|
|
// Modified by: Vadim Zeitlin to check error codes, added Detach() method
|
|
// Created: 24/06/98
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 1998 Guilhem Lavaux
|
|
// Licence: wxWindows license
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_PROCESSH__
|
|
#define _WX_PROCESSH__
|
|
|
|
#ifdef __GNUG__
|
|
#pragma interface "process.h"
|
|
#endif
|
|
|
|
#include "wx/defs.h"
|
|
#include "wx/object.h"
|
|
#include "wx/event.h"
|
|
#include "wx/stream.h"
|
|
|
|
// Process Event handling
|
|
class WXDLLEXPORT wxProcessEvent : public wxEvent
|
|
{
|
|
DECLARE_DYNAMIC_CLASS(wxProcessEvent)
|
|
|
|
public:
|
|
wxProcessEvent(int id = 0, int pid = 0, int exitcode = 0) : wxEvent(id)
|
|
{
|
|
m_eventType = wxEVT_END_PROCESS;
|
|
m_pid = pid;
|
|
m_exitcode = exitcode;
|
|
}
|
|
|
|
// accessors
|
|
// PID of process which terminated
|
|
int GetPid() { return m_pid; }
|
|
|
|
// the exit code
|
|
int GetExitCode() { return m_exitcode; }
|
|
|
|
public:
|
|
int m_pid, m_exitcode;
|
|
};
|
|
|
|
// A wxProcess object should be passed to wxExecute - than its OnTerminate()
|
|
// function will be called when the process terminates.
|
|
class WXDLLEXPORT wxProcess : public wxEvtHandler
|
|
{
|
|
DECLARE_DYNAMIC_CLASS(wxProcess)
|
|
|
|
public:
|
|
wxProcess(wxEvtHandler *parent = (wxEvtHandler *) NULL, int id = -1)
|
|
{ Init(parent, id, FALSE); }
|
|
wxProcess(wxEvtHandler *parent, bool redirect)
|
|
{ Init(parent, -1, redirect); }
|
|
|
|
virtual ~wxProcess();
|
|
|
|
// may be overridden to be notified about process termination
|
|
virtual void OnTerminate(int pid, int status);
|
|
|
|
// call this before passing the object to wxExecute() to redirect the
|
|
// launched process stdin/stdout, then use GetInputStream() and
|
|
// GetOutputStream() to get access to them
|
|
void Redirect() { m_redirect = TRUE; }
|
|
bool IsRedirected() const { return m_redirect; }
|
|
|
|
// detach from the parent - should be called by the parent if it's deleted
|
|
// before the process it started terminates
|
|
void Detach();
|
|
|
|
// Pipe handling
|
|
wxInputStream *GetInputStream() const { return m_inputStream; }
|
|
wxOutputStream *GetOutputStream() const { return m_outputStream; }
|
|
|
|
// implementation only (for wxExecute)
|
|
void SetPipeStreams(wxInputStream *inStream, wxOutputStream *outStream);
|
|
|
|
protected:
|
|
void Init(wxEvtHandler *parent, int id, bool redirect);
|
|
|
|
int m_id;
|
|
|
|
wxInputStream *m_inputStream;
|
|
wxOutputStream *m_outputStream;
|
|
|
|
bool m_redirect;
|
|
};
|
|
|
|
typedef void (wxObject::*wxProcessEventFunction)(wxProcessEvent&);
|
|
|
|
#define EVT_END_PROCESS(id, func) { wxEVT_END_PROCESS, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxProcessEventFunction) & func, NULL},
|
|
|
|
#endif
|
|
// _WX_PROCESSH__
|