Tôi có một boost::thread
thực hiện đồng bộ lần đọc trên boost::asio::serial_port
. Khi tôi phá hủy một thể hiện của lớp có chứa cả hai, tôi muốn thread kết thúc một cách duyên dáng ngay cả khi nó bị chặn trong một cuộc gọi đã đọc. Tôi có thể làm cái này như thế nào?Bỏ chặn đồng bộ đọc trên tăng :: asio :: serial_port
Nhìn vào docs, tôi đã thử cancel
, nhưng nó chỉ hoạt động cho các lần đọc/ghi không đồng bộ. Sau đó, tôi đã thử close
, nhưng tôi có ngoại lệ và đó không phải là loại bạn có thể khôi phục. Có thể sử dụng send_break
hoặc native_handle
? (Đây là Windows và tính di động không phải là quan trọng)
Cập nhật: Tôi cũng đã cố gắng để stop
các io_service
tôi được truyền cho constructor đối tượng cổng của sê-ri, nhưng read
chưa được bỏ chặn.
Chỉnh sửa: Ngoại lệ thực sự là "bắt được", nhưng tôi không muốn đặt khối try/catch bên trong một destructor, và tái cấu trúc mã để thực hiện quá trình tắt bên ngoài destructor sẽ kích hoạt nhiều thay đổi lớp trên. Vì vậy, tôi chỉ đi cho giải pháp này nếu một số cơ quan Tăng cường nói rằng không có cách nào khác.
Và đó là lý do tại sao Boost :: Asio không được gọi là Boost :: SioAndAsio :) –
Bạn có nghĩa là tăng :: asio :: serial_port không có nghĩa là được đọc hoặc viết đồng bộ? Tôi đã đi đọc/ghi đồng bộ để tránh bỏ phiếu ... Nếu họ cho phép tôi đọc và viết theo cách đó, hoạt động tuyệt vời và không lãng phí chu kỳ CPU, họ nên đưa ra một cách để kết thúc một cách duyên dáng. –
Có, tôi muốn làm điều tương tự vài ngày trước. –