Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef ProcessControlH
00033 #define ProcessControlH
00034
00035 #include <zeusbase/System/StringList.h>
00036 #include <zeusbase/System/ZObject.h>
00037
00038 #if defined(ENABLE_WIN32_BINDING)
00039
00040 #elif defined(ENABLE_LINUX_BINDING)
00041 #include <sys/types.h>
00042 #endif
00043
00044
00045 BEGIN_NAMESPACE_Zeus
00046
00047
00051
00052 zeusbase_class TProcessControl : public TZObject
00053 {
00054 public:
00055
00058
00059 enum EProcessState
00060 {
00061 etInit,
00062 etStarted,
00063 etTerminated,
00064 etErrorState,
00065 };
00066
00067
00068 TProcessControl(const IString& rApplicationName);
00069 TProcessControl(Uint uiProcessID);
00070
00071
00072 void addParameter(const IString& rParameter);
00073 void addParameter(const TString& rParameter);
00074 void addParameter(const IString& rName, const IString& rValue);
00075 void addParameter(const TString& rName, const TString& rValue);
00076 void clearParameter();
00077 Int getParameterCount() const;
00078 const IString& getParameter(Int iIndex) const;
00079 TString getParameters() const;
00080 const TString& getApplicationName() const;
00081 bool getTerminateProcessOnDestroy() const;
00082 void setTerminateProcessOnDestroy(bool bValue);
00083
00084
00085 bool exists() const;
00086 Int getExitCode() const;
00087 Uint getProcessID() const;
00088 Uint getMainThreadID() const;
00089 bool isStarted() const;
00090 bool isTerminated() const;
00091
00092
00093 Retval kill();
00094 Retval start();
00095 Retval terminate(Int iExitCode = 0);
00096
00097
00098 bool waitForTermination(Float fTimeOut);
00099 bool waitForIdle(Float fTimeOut);
00100
00101
00102 bool activateMainWindow();
00103 Uint getMainWindowID() const;
00104 TString getMainWindowTitle() const;
00105 void setMainWindowVisibility(bool bMode);
00106
00107 protected:
00108 virtual ~TProcessControl();
00109
00110 private:
00111 void create();
00112 void resetVariables();
00113 TString normalizeParameter(const IString& rValue);
00114
00116 TString m_strApplicationName;
00118 TStringList m_lstParameters;
00120 bool m_bShowWindow;
00122 bool m_bTerminateProcessOnDestroy;
00124 mutable EProcessState m_eState;
00125
00126 #if defined(ENABLE_WIN32_BINDING)
00127
00128 STARTUPINFO m_StartupInfo;
00130 PROCESS_INFORMATION m_ProcessInfo;
00132 bool m_bReleaseHandle;
00133 #elif defined(ENABLE_LINUX_BINDING)
00134 Retval sendSignal(int iSignal);
00135
00137 pid_t m_ProcessID;
00139 mutable int m_iProcessStatus;
00140 #endif
00141 };
00142
00143
00147
00148 inline void TProcessControl::addParameter(const TString& rParameter)
00149 {
00150 m_lstParameters.add(normalizeParameter(rParameter));
00151 }
00152
00153
00157
00158 inline void TProcessControl::addParameter(const IString& rParameter)
00159 {
00160 m_lstParameters.add(normalizeParameter(rParameter));
00161 }
00162
00163
00169
00170 inline void TProcessControl::addParameter(const IString& rName, const IString& rValue)
00171 {
00172 TString strParam(rName);
00173 strParam += L"=";
00174 strParam += rValue;
00175 m_lstParameters.add(normalizeParameter(strParam));
00176 }
00177
00178
00184
00185 inline void TProcessControl::addParameter(const TString& rName, const TString& rValue)
00186 {
00187 TString strParam(rName);
00188 strParam += L"=";
00189 strParam += rValue;
00190 m_lstParameters.add(normalizeParameter(strParam));
00191 }
00192
00193
00196
00197 inline void TProcessControl::clearParameter()
00198 {
00199 m_lstParameters.clear();
00200 }
00201
00202
00205
00206 inline Int TProcessControl::getParameterCount() const
00207 {
00208 return m_lstParameters.getCount();
00209 }
00210
00211
00214
00215 inline const IString& TProcessControl::getParameter(Int iIndex) const
00216 {
00217 return m_lstParameters.getItemConst(iIndex);
00218 }
00219
00220
00223
00224 inline const TString& TProcessControl::getApplicationName() const
00225 {
00226 return m_strApplicationName;
00227 }
00228
00229
00232
00233 inline bool TProcessControl::getTerminateProcessOnDestroy() const
00234 {
00235 return m_bTerminateProcessOnDestroy;
00236 }
00237
00238
00241
00242 inline void TProcessControl::setTerminateProcessOnDestroy(bool bValue)
00243 {
00244 m_bTerminateProcessOnDestroy = bValue;
00245 }
00246
00247
00250
00251 inline bool TProcessControl::isStarted() const
00252 {
00253
00254 if (m_eState == etStarted && !exists())
00255 {
00256 m_eState = etTerminated;
00257 }
00258 return (m_eState == etStarted);
00259 }
00260
00261
00264
00265 inline bool TProcessControl::isTerminated() const
00266 {
00267 return (m_eState == etTerminated);
00268 }
00269
00270
00271 END_NAMESPACE_Zeus
00272
00273 #endif