/[pcsx2_0.9.7]/trunk/3rdparty/wxWidgets/src/common/process.cpp
ViewVC logotype

Annotation of /trunk/3rdparty/wxWidgets/src/common/process.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 31 - (hide annotations) (download)
Tue Sep 7 03:24:11 2010 UTC (10 years, 4 months ago) by william
File size: 4697 byte(s)
committing r3113 initial commit again...
1 william 31 /////////////////////////////////////////////////////////////////////////////
2     // Name: process.cpp
3     // Purpose: Process termination classes
4     // Author: Guilhem Lavaux
5     // Modified by: Vadim Zeitlin to check error codes, added Detach() method
6     // Created: 24/06/98
7     // RCS-ID: $Id: process.cpp 42702 2006-10-30 09:03:18Z JS $
8     // Copyright: (c) Guilhem Lavaux
9     // Licence: wxWindows licence
10     /////////////////////////////////////////////////////////////////////////////
11    
12     // ============================================================================
13     // declarations
14     // ============================================================================
15    
16     // ----------------------------------------------------------------------------
17     // headers
18     // ----------------------------------------------------------------------------
19    
20     // For compilers that support precompilation, includes "wx.h".
21     #include "wx/wxprec.h"
22    
23     #ifdef __BORLANDC__
24     #pragma hdrstop
25     #endif
26    
27     #include "wx/process.h"
28    
29     // ----------------------------------------------------------------------------
30     // event tables and such
31     // ----------------------------------------------------------------------------
32    
33     DEFINE_EVENT_TYPE(wxEVT_END_PROCESS)
34    
35     IMPLEMENT_DYNAMIC_CLASS(wxProcess, wxEvtHandler)
36     IMPLEMENT_DYNAMIC_CLASS(wxProcessEvent, wxEvent)
37    
38     // ============================================================================
39     // wxProcess implementation
40     // ============================================================================
41    
42     // ----------------------------------------------------------------------------
43     // wxProcess creation
44     // ----------------------------------------------------------------------------
45    
46     void wxProcess::Init(wxEvtHandler *parent, int id, int flags)
47     {
48     if ( parent )
49     SetNextHandler(parent);
50    
51     m_id = id;
52     m_pid = 0;
53     m_redirect = (flags & wxPROCESS_REDIRECT) != 0;
54    
55     #if wxUSE_STREAMS
56     m_inputStream = NULL;
57     m_errorStream = NULL;
58     m_outputStream = NULL;
59     #endif // wxUSE_STREAMS
60     }
61    
62     /* static */
63     wxProcess *wxProcess::Open(const wxString& cmd, int flags)
64     {
65     wxASSERT_MSG( !(flags & wxEXEC_SYNC), wxT("wxEXEC_SYNC should not be used." ));
66     wxProcess *process = new wxProcess(wxPROCESS_REDIRECT);
67     long pid = wxExecute(cmd, flags, process);
68     if( !pid )
69     {
70     // couldn't launch the process
71     delete process;
72     return NULL;
73     }
74    
75     process->SetPid(pid);
76    
77     return process;
78     }
79    
80     // ----------------------------------------------------------------------------
81     // wxProcess termination
82     // ----------------------------------------------------------------------------
83    
84     wxProcess::~wxProcess()
85     {
86     #if wxUSE_STREAMS
87     delete m_inputStream;
88     delete m_errorStream;
89     delete m_outputStream;
90     #endif // wxUSE_STREAMS
91     }
92    
93     void wxProcess::OnTerminate(int pid, int status)
94     {
95     wxProcessEvent event(m_id, pid, status);
96    
97     if ( !ProcessEvent(event) )
98     delete this;
99     //else: the object which processed the event is responsible for deleting
100     // us!
101     }
102    
103     void wxProcess::Detach()
104     {
105     SetNextHandler(NULL);
106     }
107    
108     // ----------------------------------------------------------------------------
109     // process IO redirection
110     // ----------------------------------------------------------------------------
111    
112     #if wxUSE_STREAMS
113    
114     void wxProcess::SetPipeStreams(wxInputStream *inputSstream,
115     wxOutputStream *outputStream,
116     wxInputStream *errorStream)
117     {
118     m_inputStream = inputSstream;
119     m_errorStream = errorStream;
120     m_outputStream = outputStream;
121     }
122    
123     bool wxProcess::IsInputOpened() const
124     {
125     return m_inputStream && m_inputStream->GetLastError() != wxSTREAM_EOF;
126     }
127    
128     bool wxProcess::IsInputAvailable() const
129     {
130     return m_inputStream && m_inputStream->CanRead();
131     }
132    
133     bool wxProcess::IsErrorAvailable() const
134     {
135     return m_errorStream && m_errorStream->CanRead();
136     }
137    
138     #endif // wxUSE_STREAMS
139    
140     // ----------------------------------------------------------------------------
141     // process killing
142     // ----------------------------------------------------------------------------
143    
144     /* static */
145     wxKillError wxProcess::Kill(int pid, wxSignal sig, int flags)
146     {
147     wxKillError rc;
148     (void)wxKill(pid, sig, &rc, flags);
149    
150     return rc;
151     }
152    
153     /* static */
154     bool wxProcess::Exists(int pid)
155     {
156     switch ( Kill(pid, wxSIGNONE) )
157     {
158     case wxKILL_OK:
159     case wxKILL_ACCESS_DENIED:
160     return true;
161    
162     default:
163     case wxKILL_ERROR:
164     case wxKILL_BAD_SIGNAL:
165     wxFAIL_MSG( _T("unexpected wxProcess::Kill() return code") );
166     // fall through
167    
168     case wxKILL_NO_PROCESS:
169     return false;
170     }
171     }
172    

  ViewVC Help
Powered by ViewVC 1.1.22