1
1
#ifndef DEBUGIO_H_
2
2
#define DEBUGIO_H_
3
3
4
+ #include < atomic>
4
5
#include < functional>
5
6
#include < thread>
6
7
@@ -44,6 +45,7 @@ namespace debugio {
44
45
shared_memory<Buffer> buffer;
45
46
event buffer_ready;
46
47
event data_ready;
48
+ std::atomic<bool > stop_required;
47
49
48
50
int open ();
49
51
int close ();
@@ -57,6 +59,7 @@ namespace debugio {
57
59
: buffer(DATA_BUFFER_ID)
58
60
, buffer_ready(EVENTS_BUFFER_READY_ID)
59
61
, data_ready(EVENTS_DATA_READY_ID)
62
+ , stop_required(false )
60
63
{
61
64
}
62
65
@@ -103,14 +106,16 @@ namespace debugio {
103
106
*/
104
107
class Monitor : DebugIoBase {
105
108
private:
106
- std::jthread monitor;
109
+ std::thread monitor;
107
110
108
111
public:
109
112
Monitor ();
110
113
virtual ~Monitor ();
111
114
112
115
int start (std::function<int (Buffer*)> callback);
113
116
int stop ();
117
+
118
+ std::thread::native_handle_type native_handle ();
114
119
};
115
120
116
121
inline Monitor::Monitor ()
@@ -134,9 +139,10 @@ namespace debugio {
134
139
return -1 ;
135
140
}
136
141
137
- monitor = std::jthread ([this , callback](std::stop_token st) mutable {
142
+ stop_required.store (false );
143
+ monitor = std::thread ([this , callback]() mutable {
138
144
this ->buffer_ready .notify ();
139
- while (!st. stop_requested ()) {
145
+ while (!this -> stop_required . load ()) {
140
146
if (this ->data_ready .wait (100 ) == 0 ) {
141
147
callback (&buffer);
142
148
this ->buffer_ready .notify ();
@@ -152,12 +158,17 @@ namespace debugio {
152
158
return 0 ;
153
159
}
154
160
155
- monitor. request_stop ( );
161
+ stop_required. store ( true );
156
162
monitor.join ();
157
163
158
164
return close ();
159
165
}
160
166
167
+ inline std::thread::native_handle_type Monitor::native_handle ()
168
+ {
169
+ return monitor.native_handle ();
170
+ }
171
+
161
172
/* **************************************************************************
162
173
* DebugIO Buffer Writer
163
174
*/
0 commit comments