xtd - Reference Guide  0.1.0
Modern c++17/20 framework to create console, GUI and unit test applications on Windows, macOS, Linux, iOS and android.
Loading...
Searching...
No Matches
process.h
Go to the documentation of this file.
1
4#pragma once
5#include "../core_export.h"
6#include "../event.h"
7#include "../event_handler.h"
8#include "../object.h"
9#include "../ustring.h"
12#include "process_start_info.h"
13#include <chrono>
14#include <functional>
15#include <memory>
16#include <optional>
17#include <thread>
18
20struct __init_process_message_box_message__;
22
24namespace xtd {
26 namespace diagnostics {
41 class core_export_ process final : public object {
42 struct data;
43
44 public:
51 friend process;
52 void set_data(data* data) {data_ = data;}
53 public:
56 bool is_empty() const noexcept;
57
61 xtd::diagnostics::data_received_event_handler& operator+=(const xtd::diagnostics::data_received_event_handler& handler) noexcept;
62
66 xtd::diagnostics::data_received_event_handler& operator+=(const typename xtd::diagnostics::data_received_event_handler::function_t& function) noexcept;
67
71 template<typename fn_t>
72 xtd::diagnostics::data_received_event_handler& operator+=(fn_t function) noexcept {
73 data_->error_data_received_callback_+=(function);
74 return xtd::diagnostics::data_received_event_handler::operator+=(function);
75 }
76
81
85 xtd::diagnostics::data_received_event_handler& operator-=(const typename xtd::diagnostics::data_received_event_handler::function_t& function) noexcept;
86
90 template<typename fn_t>
91 xtd::diagnostics::data_received_event_handler& operator -=(fn_t function) noexcept {
92 data_->error_data_received_callback_-=(function);
93 return data_received_event_handler::operator-=(function);
94 }
95
96 private:
97 data* data_ = nullptr;
98 };
99
105 class exit_event : protected xtd::event_handler {
106 friend process;
107 void set_data(data* data) {data_ = data;}
108 public:
111 bool is_empty() const noexcept;
112
116 xtd::event_handler& operator+=(const xtd::event_handler& handler) noexcept;
117
121 xtd::event_handler& operator+=(const typename xtd::event_handler::function_t& function) noexcept;
122
126 template<typename fn_t>
127 xtd::event_handler& operator+=(fn_t function) noexcept {
128 data_->exit_callback_+=(function);
129 return xtd::event_handler::operator+=(function);
130 }
131
136
140 xtd::event_handler& operator-=(const typename xtd::event_handler::function_t& function) noexcept;
141
145 template<typename fn_t>
146 xtd::event_handler& operator -=(fn_t function) noexcept {
147 data_->exit_callback_-=(function);
148 return xtd::event_handler::operator-=(function);
149 }
150
151 private:
152 data* data_ = nullptr;
153 };
154
161 friend process;
162 void set_data(data* data) {data_ = data;}
163 public:
166 bool is_empty() const noexcept;
167
171 xtd::diagnostics::data_received_event_handler& operator+=(const xtd::diagnostics::data_received_event_handler& handler) noexcept;
172
176 xtd::diagnostics::data_received_event_handler& operator+=(const typename xtd::diagnostics::data_received_event_handler::function_t& function) noexcept;
177
181 template<typename fn_t>
182 xtd::diagnostics::data_received_event_handler& operator+=(fn_t function) noexcept {
183 data_->output_data_received_callback_+=(function);
184 return xtd::diagnostics::data_received_event_handler::operator+=(function);
185 }
186
191
195 xtd::diagnostics::data_received_event_handler& operator-=(const typename xtd::diagnostics::data_received_event_handler::function_t& function) noexcept;
196
200 template<typename fn_t>
201 xtd::diagnostics::data_received_event_handler& operator -=(fn_t function) noexcept {
202 data_->output_data_received_callback_-=(function);
203 return xtd::diagnostics::data_received_event_handler::operator-=(function);
204 }
205
206 private:
207 data* data_ = nullptr;
208 };
209
211 using time_point = std::chrono::system_clock::time_point;
212
222 process(const process&) = default;
223 process& operator=(const process& value);
224 ~process();
226
242 int32_t base_priority() const;
243
260
272 int32_t exit_code() const;
273
279
287 intptr_t handle() const;
288
296 bool has_exited() const;
297
305 int32_t id() const;
306
313
346
353
462 std::istream& standard_error();
463
527 std::ostream& standard_input();
528
652 std::istream& standard_output();
653
684
689
693 void close();
694
703 void kill();
704
711 bool start();
737 static process start(const ustring& file_name);
749 static process start(const ustring& file_name, const ustring& arguments);
750
759
768 process& wait_for_exit(int32_t milliseconds);
769
775
782
788
789 protected:
793 virtual void on_exited();
794
795 private:
796 struct data {
798 std::optional<intptr_t> handle_ = 0;
799 int32_t id_ = 0;
800 ustring machine_name_;
802 std::unique_ptr<std::ostream> standard_input_;
803 std::unique_ptr<std::istream> standard_output_;
804 std::unique_ptr<std::istream> standard_error_;
805 std::thread thread_;
806 process::time_point start_time_;
807 process::time_point exit_time_;
808 bool enable_raising_events_ = false;
809 std::optional<int32_t> exit_code_;
810 event_handler exit_callback_;
811 data_received_event_handler error_data_received_callback_;
812 data_received_event_handler output_data_received_callback_;
813 std::exception_ptr exception_pointer_;
814 };
815 std::shared_ptr<data> data_ = std::make_shared<data>();
816 friend __init_process_message_box_message__;
817 inline static xtd::delegate<void(const ustring&)> message_box_message_;
818 };
819 }
820}
Represents a process error data received event.
Definition: process.h:50
xtd::diagnostics::data_received_event_handler & operator-=(const xtd::diagnostics::data_received_event_handler &handler) noexcept
Removes an handler to the event.
bool is_empty() const noexcept
Gets a value indicate if the event is empty.
xtd::diagnostics::data_received_event_handler & operator-=(const typename xtd::diagnostics::data_received_event_handler::function_t &function) noexcept
Removes a function to the event.
Represents a process exit event.
Definition: process.h:105
bool is_empty() const noexcept
Gets a value indicate if the event is empty.
xtd::event_handler & operator-=(const typename xtd::event_handler::function_t &function) noexcept
Removes a function to the event.
xtd::event_handler & operator-=(const xtd::event_handler &handler) noexcept
Removes an handler to the event.
Represents a process output data received event.
Definition: process.h:160
xtd::diagnostics::data_received_event_handler & operator-=(const xtd::diagnostics::data_received_event_handler &handler) noexcept
Removes an handler to the event.
bool is_empty() const noexcept
Gets a value indicate if the event is empty.
xtd::diagnostics::data_received_event_handler & operator-=(const typename xtd::diagnostics::data_received_event_handler::function_t &function) noexcept
Removes a function to the event.
Specifies a set of values that are used when you start a process.
Definition: process_start_info.h:31
Provides access to local and remote processes and enables you to start and stop local system processe...
Definition: process.h:41
output_data_received_event output_data_received
Occurs each time an application writes a line to its redirected xtd::diagnostics::process::standard_o...
Definition: process.h:787
xtd::diagnostics::process_priority_class priority_class() const
Gets the overall priority category for the associated process.
virtual void on_exited()
Raises the xtd::diagnostics::process::exited event.
ustring process_name() const
Gets the name of the process.
void close()
Frees all the resources that are associated with this component.
std::istream & standard_output()
Gets a stream used to read the textual output of the application.
bool enable_raising_events() const
Gets whether the xtd::diagnostics::process::exited event should be raised when the process terminates...
static process start(const xtd::diagnostics::process_start_info &start_info)
Starts the process resource that is specified by the parameter containing process start information (...
int32_t base_priority() const
Gets the base priority xof the associated process.
process & priority_class(xtd::diagnostics::process_priority_class value)
Sets the overall priority category for the associated process.
void kill()
Immediately stops the associated process.
process & wait_for_exit(int32_t milliseconds)
Instructs the Process component to wait the specified number of milliseconds for the associated proce...
const xtd::diagnostics::process_start_info & start_info() const
Gets the properties to pass to the xtd::diagnostics::process::start() method of the xtd::diagnostics:...
process & enable_raising_events(bool value)
Sets whether the xtd::diagnostics::process::exited event should be raised when the process terminates...
process()
Initializes a new instance of the xtd::diagnostics::process class.
std::ostream & standard_input()
Gets a stream used to write the input of the application.
std::chrono::system_clock::time_point time_point
Represents a point in time.
Definition: process.h:211
std::istream & standard_error()
Gets a stream used to read the error output of the application.
xtd::diagnostics::process_start_info & start_info()
Gets the properties to pass to the xtd::diagnostics::process::start() method of the xtd::diagnostics:...
int32_t id() const
Gets the unique identifier for the associated process.
bool has_exited() const
Gets a value indicating whether the associated process has been terminated.
static process start(const ustring &file_name, const ustring &arguments)
Starts a process resource by specifying the name of an application and a set of command-line argument...
error_data_received_event error_data_received
Occurs when an application writes to its redirected xtd::diagnostics::process::standard_error stream.
Definition: process.h:774
time_point start_time() const
Gets the time that the associated process was started.
time_point exit_time() const
Gets the time that the associated process exited.
intptr_t handle() const
Gets the native handle of the associated process.
process & start_info(const xtd::diagnostics::process_start_info &value)
SGets the properties to pass to the xtd::diagnostics::process::start() method of the xtd::diagnostics...
ustring machine_name() const
Gets the name of the computer the associated process is running on.
bool start()
Starts (or reuses) the process resource that is specified by the xtd::diagnostics::process::start_inf...
exit_event exited
Occurs when a process exits.
Definition: process.h:781
static process start(const ustring &file_name)
Starts a process resource by specifying the name of a document or application file and associates the...
int32_t exit_code() const
Gets the value that the associated process specified when it terminated.
process & wait_for_exit()
Instructs the xtd::diagnostics::process component to wait indefinitely for the associated process to ...
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition: object.h:26
Represents text as a sequence of UTF-8 code units.
Definition: ustring.h:48
Contains xtd::diagnostics::data_received_event_handler event handler.
generic_event_handler<> event_handler
Represents the method that will handle an event that has no event data.
Definition: event_handler.h:33
xtd::delegate< void(object &sender, const xtd::diagnostics::data_received_event_args &e)> data_received_event_handler
Represents the method that will handle the xtd::diagnostics::process::output_data_received and xtd::d...
Definition: data_received_event_handler.h:20
#define core_export_
Define shared library export.
Definition: core_export.h:13
process_priority_class
Indicates the priority that the system associates with a process. This value, together with the prior...
Definition: process_priority_class.h:19
@ normal
Specifies that the process has no special scheduling needs.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition: system_report.h:17
Contains xtd::diagnostics::process_priority_class enum class.
Contains xtd::diagnostics::process_start_info class.