123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #ifndef __SCRIPT_EXECUTOR__
- #define __SCRIPT_EXECUTOR__
- #pragma once
- #define BUFSIZE 4096
- enum PY_RUN_TYPE
- {
- EMBEDDED,
- SUBPROCESS
- };
- class CScriptExecutor
- {
- public:
- CScriptExecutor(void);
- ~CScriptExecutor(void);
- protected:
- HANDLE m_hWorkThread;
- HANDLE m_hWorkEvent;
- HANDLE m_hLogThread;
- HANDLE m_hLogEvent;
- BOOL m_bStatus;
- TCHAR m_szScriptPath[MAX_PATH];
- TCHAR m_szLogPath[MAX_PATH];
- TCHAR m_szExtraSentence[MAX_PATH];
- int m_nRunType;
-
- HANDLE m_hStdOutRead;
- HANDLE m_hStdOutWrite;
- HANDLE m_hStdErrorWrite;
- HANDLE m_hOldStdOutWrite;
-
- STARTUPINFO m_si;
- PROCESS_INFORMATION m_pi;
-
- BOOL m_bKillProcess;
-
- BOOL m_bStopLogExport;
-
- CTime m_tStartTime;
-
- CTime m_tEndTime;
-
- DWORD m_dwSubprocessId;
-
- DWORD m_dwThreadId;
-
- BOOL m_bRuned;
- protected:
-
- static DWORD WINAPI _WorkerThread(LPVOID lpParam);
-
- static DWORD WINAPI _LogExportThread(LPVOID lpParam);
-
- int RedirectProcessStdout();
-
- int RedirectSubprocessStdout(LPSTARTUPINFO si = NULL);
-
- void CatchPythonException();
-
- int RunEmbeddedScript();
-
- int RunScripProcess();
-
- bool StartWorkThread();
- bool StartLogThread();
-
- void EndWorkThread();
- void EndLogThread();
- void EndThread(HANDLE hThread, HANDLE hEvent);
-
- BOOL EndSubprocess();
-
- void ReadFromPipe();
-
- void EndProcessStdOut();
- void EndSubprocessStdOut();
- public:
-
- void InitScript(
- std::string strScript,
- std::string strLogPath,
- std::string strScriptCmd,
- int nRunType = EMBEDDED);
-
- bool StartScript();
-
- void StopScript();
-
- bool IsScriptOver();
-
- int GetRunType() const { return m_nRunType;}
-
- DWORD GetScriptId() const {
- if ( m_nRunType == SUBPROCESS )
- return m_dwSubprocessId;
- else
- return m_dwThreadId;
- }
- };
- #endif
|