23class TerminalProcess_Windows :
public ITerminalProcess
26 TerminalProcess_Windows();
27 ~TerminalProcess_Windows()
override;
29 bool Start(
const TerminalLaunchConfig& cfg, std::string& outError)
override;
30 bool WriteStdin(
const char* data,
size_t len)
override;
31 void RequestStop()
override;
32 void ForceKill()
override;
33 bool IsRunning()
const override {
return mRunning.load(); }
34 int GetExitCode()
const override {
return mExitCode.load(); }
36 bool IsTty()
const override {
return false; }
39 void ReaderLoop(
void* pipeHandle, TerminalEntryKind kind);
41 void CloseAllHandles();
44 static std::string BuildCommandLine(
const std::string& exe,
45 const std::vector<std::string>& args);
47 void* mProcess =
nullptr;
48 unsigned long mProcessId = 0;
51 void* mStdoutRead =
nullptr;
52 void* mStdoutWrite =
nullptr;
53 void* mStderrRead =
nullptr;
54 void* mStderrWrite =
nullptr;
55 void* mStdinRead =
nullptr;
56 void* mStdinWrite =
nullptr;
58 std::thread mStdoutReader;
59 std::thread mStderrReader;
60 std::thread mWaitThread;
62 std::atomic<bool> mRunning{
false };
63 std::atomic<bool> mStopRequested{
false };
64 std::atomic<int> mExitCode{ 0 };
66 std::mutex mStdinMutex;
67 std::mutex mLifecycleMutex;