diff options
Diffstat (limited to 'include/cru/base/platform/win/Win32SubProcess.h')
| -rw-r--r-- | include/cru/base/platform/win/Win32SubProcess.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/include/cru/base/platform/win/Win32SubProcess.h b/include/cru/base/platform/win/Win32SubProcess.h new file mode 100644 index 00000000..e7189b02 --- /dev/null +++ b/include/cru/base/platform/win/Win32SubProcess.h @@ -0,0 +1,41 @@ +#pragma once + +#ifndef _WIN32 +#error "This file can only be included on Windows." +#endif + +#include "../../SubProcess.h" +#include "../../io/AutoReadStream.h" +#include "Base.h" +#include "Stream.h" + +namespace cru::platform::win { +class CRU_BASE_API Win32SubProcessImpl + : public Object, + public virtual IPlatformSubProcessImpl { + CRU_DEFINE_CLASS_LOG_TAG("cru::platform::win::Win32SubProcessImpl") + + public: + explicit Win32SubProcessImpl(); + ~Win32SubProcessImpl(); + + void PlatformCreateProcess(const SubProcessStartInfo& start_info) override; + SubProcessExitResult PlatformWaitForProcess() override; + void PlatformKillProcess() override; + + io::Stream* GetStdinStream() override; + io::Stream* GetStdoutStream() override; + io::Stream* GetStderrStream() override; + + private: + PROCESS_INFORMATION process_; + int exit_code_; + + std::unique_ptr<Win32HandleStream> stdin_stream_; + std::unique_ptr<Win32HandleStream> stdout_stream_; + std::unique_ptr<Win32HandleStream> stderr_stream_; + + std::unique_ptr<io::AutoReadStream> stdout_buffer_stream_; + std::unique_ptr<io::AutoReadStream> stderr_buffer_stream_; +}; +} // namespace cru::platform::win |
