File tree Expand file tree Collapse file tree 2 files changed +21
-7
lines changed
include/ur_robot_driver/rtde Expand file tree Collapse file tree 2 files changed +21
-7
lines changed Original file line number Diff line number Diff line change @@ -55,7 +55,16 @@ class RTDEWriter
5555 * \param recipe The recipe to use for communication
5656 */
5757 RTDEWriter (comm::URStream<RTDEPackage>* stream, const std::vector<std::string>& recipe);
58- ~RTDEWriter () = default ;
58+
59+ ~RTDEWriter ()
60+ {
61+ running_ = false ;
62+ std::this_thread::sleep_for (std::chrono::seconds (5 ));
63+ if (writer_thread_.joinable ())
64+ {
65+ writer_thread_.join ();
66+ }
67+ }
5968 /* !
6069 * \brief Starts the writer thread, which periodically clears the queue to write packages to the
6170 * robot.
@@ -120,6 +129,7 @@ class RTDEWriter
120129 uint8_t recipe_id_;
121130 moodycamel::BlockingReaderWriterQueue<std::unique_ptr<DataPackage>> queue_;
122131 std::thread writer_thread_;
132+ bool running_;
123133};
124134
125135} // namespace rtde_interface
Original file line number Diff line number Diff line change @@ -32,13 +32,14 @@ namespace ur_driver
3232namespace rtde_interface
3333{
3434RTDEWriter::RTDEWriter (comm::URStream<RTDEPackage>* stream, const std::vector<std::string>& recipe)
35- : stream_(stream), recipe_(recipe), queue_{ 32 }
35+ : stream_(stream), recipe_(recipe), queue_{ 32 }, running_( false )
3636{
3737}
3838
3939void RTDEWriter::init (uint8_t recipe_id)
4040{
4141 recipe_id_ = recipe_id;
42+ running_ = true ;
4243 writer_thread_ = std::thread (&RTDEWriter::run, this );
4344}
4445
@@ -48,13 +49,16 @@ void RTDEWriter::run()
4849 size_t size;
4950 size_t written;
5051 std::unique_ptr<DataPackage> package;
51- while (true )
52+ while (running_ )
5253 {
53- queue_.waitDequeue (package);
54- package->setRecipeID (recipe_id_);
55- size = package->serializePackage (buffer);
56- stream_->write (buffer, size, written);
54+ if (queue_.waitDequeTimed (package, 1000000 ))
55+ {
56+ package->setRecipeID (recipe_id_);
57+ size = package->serializePackage (buffer);
58+ stream_->write (buffer, size, written);
59+ }
5760 }
61+ LOG_DEBUG (" Write thread ended." );
5862}
5963
6064bool RTDEWriter::sendSpeedSlider (double speed_slider_fraction)
You can’t perform that action at this time.
0 commit comments