aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/include
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-11-20 11:09:53 +0100
committerGitHub <[email protected]>2023-11-20 11:09:53 +0100
commitb8285f70b7bde814ab7eb0a00ded1018cc5c4395 (patch)
tree73951970e25491c517e1c9d3c08a9f1ce28c307d /src/zencore/include
parent0.2.35-pre0 (diff)
downloadzen-b8285f70b7bde814ab7eb0a00ded1018cc5c4395.tar.xz
zen-b8285f70b7bde814ab7eb0a00ded1018cc5c4395.zip
moved process handling code into separate h/cpp (#555)
Diffstat (limited to 'src/zencore/include')
-rw-r--r--src/zencore/include/zencore/process.h94
-rw-r--r--src/zencore/include/zencore/thread.h80
2 files changed, 94 insertions, 80 deletions
diff --git a/src/zencore/include/zencore/process.h b/src/zencore/include/zencore/process.h
new file mode 100644
index 000000000..ec598b929
--- /dev/null
+++ b/src/zencore/include/zencore/process.h
@@ -0,0 +1,94 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include <zencore/thread.h>
+#include <zencore/zencore.h>
+
+#include <filesystem>
+
+namespace zen {
+
+/** Basic process abstraction
+ */
+class ProcessHandle
+{
+public:
+ ZENCORE_API ProcessHandle();
+
+ ProcessHandle(const ProcessHandle&) = delete;
+ ProcessHandle& operator=(const ProcessHandle&) = delete;
+
+ ZENCORE_API ~ProcessHandle();
+
+ ZENCORE_API void Initialize(int Pid);
+ ZENCORE_API void Initialize(void* ProcessHandle); /// Initialize with an existing handle - takes ownership of the handle
+ ZENCORE_API [[nodiscard]] bool IsRunning() const;
+ ZENCORE_API [[nodiscard]] bool IsValid() const;
+ ZENCORE_API bool Wait(int TimeoutMs = -1);
+ ZENCORE_API int WaitExitCode();
+ ZENCORE_API void Terminate(int ExitCode);
+ ZENCORE_API void Reset();
+ [[nodiscard]] inline int Pid() const { return m_Pid; }
+
+private:
+ void* m_ProcessHandle = nullptr;
+ int m_Pid = 0;
+};
+
+/** Basic process creation
+ */
+struct CreateProcOptions
+{
+ enum
+ {
+ Flag_NewConsole = 1 << 0,
+ Flag_Elevated = 1 << 1,
+ Flag_Unelevated = 1 << 2,
+ };
+
+ const std::filesystem::path* WorkingDirectory = nullptr;
+ uint32_t Flags = 0;
+};
+
+#if ZEN_PLATFORM_WINDOWS
+using CreateProcResult = void*; // handle to the process
+#else
+using CreateProcResult = int32_t; // pid
+#endif
+
+ZENCORE_API CreateProcResult CreateProc(const std::filesystem::path& Executable,
+ std::string_view CommandLine, // should also include arg[0] (executable name)
+ const CreateProcOptions& Options = {});
+
+/** Process monitor - monitors a list of running processes via polling
+
+ Intended to be used to monitor a set of "sponsor" processes, where
+ we need to determine when none of them remain alive
+
+ */
+
+class ProcessMonitor
+{
+public:
+ ProcessMonitor();
+ ~ProcessMonitor();
+
+ ZENCORE_API bool IsRunning();
+ ZENCORE_API void AddPid(int Pid);
+ ZENCORE_API bool IsActive() const;
+
+private:
+ using HandleType = void*;
+
+ mutable RwLock m_Lock;
+ std::vector<HandleType> m_ProcessHandles;
+};
+
+ZENCORE_API bool IsProcessRunning(int pid);
+ZENCORE_API int GetCurrentProcessId();
+int GetProcessId(CreateProcResult ProcId);
+
+void process_forcelink(); // internal
+
+} // namespace zen
diff --git a/src/zencore/include/zencore/thread.h b/src/zencore/include/zencore/thread.h
index 47f37c9a3..2d0ef7396 100644
--- a/src/zencore/include/zencore/thread.h
+++ b/src/zencore/include/zencore/thread.h
@@ -206,87 +206,7 @@ private:
Event Complete;
};
-/** Basic process abstraction
- */
-class ProcessHandle
-{
-public:
- ZENCORE_API ProcessHandle();
-
- ProcessHandle(const ProcessHandle&) = delete;
- ProcessHandle& operator=(const ProcessHandle&) = delete;
-
- ZENCORE_API ~ProcessHandle();
-
- ZENCORE_API void Initialize(int Pid);
- ZENCORE_API void Initialize(void* ProcessHandle); /// Initialize with an existing handle - takes ownership of the handle
- ZENCORE_API [[nodiscard]] bool IsRunning() const;
- ZENCORE_API [[nodiscard]] bool IsValid() const;
- ZENCORE_API bool Wait(int TimeoutMs = -1);
- ZENCORE_API int WaitExitCode();
- ZENCORE_API void Terminate(int ExitCode);
- ZENCORE_API void Reset();
- [[nodiscard]] inline int Pid() const { return m_Pid; }
-
-private:
- void* m_ProcessHandle = nullptr;
- int m_Pid = 0;
-};
-
-/** Basic process creation
- */
-struct CreateProcOptions
-{
- enum
- {
- Flag_NewConsole = 1 << 0,
- Flag_Elevated = 1 << 1,
- Flag_Unelevated = 1 << 2,
- };
-
- const std::filesystem::path* WorkingDirectory = nullptr;
- uint32_t Flags = 0;
-};
-
-#if ZEN_PLATFORM_WINDOWS
-using CreateProcResult = void*; // handle to the process
-#else
-using CreateProcResult = int32_t; // pid
-#endif
-
-ZENCORE_API CreateProcResult CreateProc(const std::filesystem::path& Executable,
- std::string_view CommandLine, // should also include arg[0] (executable name)
- const CreateProcOptions& Options = {});
-
-/** Process monitor - monitors a list of running processes via polling
-
- Intended to be used to monitor a set of "sponsor" processes, where
- we need to determine when none of them remain alive
-
- */
-
-class ProcessMonitor
-{
-public:
- ProcessMonitor();
- ~ProcessMonitor();
-
- ZENCORE_API bool IsRunning();
- ZENCORE_API void AddPid(int Pid);
- ZENCORE_API bool IsActive() const;
-
-private:
- using HandleType = void*;
-
- mutable RwLock m_Lock;
- std::vector<HandleType> m_ProcessHandles;
-};
-
-ZENCORE_API bool IsProcessRunning(int pid);
-ZENCORE_API int GetCurrentProcessId();
ZENCORE_API int GetCurrentThreadId();
-int GetProcessId(CreateProcResult ProcId);
-
ZENCORE_API void Sleep(int ms);
void thread_forcelink(); // internal