inline void wait(const group_handle &p) { if (::boost::detail::winapi::WaitForSingleObject(p.handle(), ::boost::detail::winapi::infinite) == ::boost::detail::winapi::wait_failed) throw_last_error("WaitForSingleObject() failed"); }
inline void terminate(const group_handle &p, std::error_code &ec) noexcept { if (!::boost::winapi::TerminateJobObject(p.handle(), EXIT_FAILURE)) ec = boost::process::detail::get_last_error(); else ec.clear(); }
inline bool wait_for( const group_handle &p, const std::chrono::duration<Rep, Period>& rel_time) { std::chrono::milliseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>(rel_time); ::boost::detail::winapi::DWORD_ wait_code; wait_code = ::boost::detail::winapi::WaitForSingleObject(p.handle(), ms.count()); if (wait_code == ::boost::detail::winapi::wait_failed) throw_last_error("WaitForSingleObject() failed"); else if (wait_code == ::boost::detail::winapi::wait_timeout) return false; // return true; }
inline bool wait_until( const group_handle &p, const std::chrono::time_point<Clock, Duration>& timeout_time) { std::chrono::milliseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>( timeout_time - std::chrono::system_clock::now()); ::boost::detail::winapi::DWORD_ wait_code; wait_code = ::boost::detail::winapi::WaitForSingleObject(p.handle(), ms.count()); if (wait_code == ::boost::detail::winapi::wait_failed) throw_last_error("WaitForSingleObject() failed"); else if (wait_code == ::boost::detail::winapi::wait_timeout) return false; // return true; }
inline void wait(const group_handle &p, std::error_code &ec) { if (::boost::detail::winapi::WaitForSingleObject(p.handle(), ::boost::detail::winapi::infinite) == ::boost::detail::winapi::wait_failed) ec = get_last_error(); }
inline void terminate(const group_handle &p) { if (!::boost::winapi::TerminateJobObject(p.handle(), EXIT_FAILURE)) boost::process::detail::throw_last_error("TerminateJobObject() failed"); }
explicit group_ref(group_handle &g) : handle(g.handle()) {}