diff --git a/tools/cabana/streams/devicestream.cc b/tools/cabana/streams/devicestream.cc index 137fe0cee6..d0efac6aa3 100644 --- a/tools/cabana/streams/devicestream.cc +++ b/tools/cabana/streams/devicestream.cc @@ -1,6 +1,7 @@ #include "tools/cabana/streams/devicestream.h" DeviceStream::DeviceStream(QObject *parent, QString address) : zmq_address(address), LiveStream(parent) { + startStreamThread(); } void DeviceStream::streamThread() { diff --git a/tools/cabana/streams/livestream.cc b/tools/cabana/streams/livestream.cc index a7aab1ab6d..1e198a8c5f 100644 --- a/tools/cabana/streams/livestream.cc +++ b/tools/cabana/streams/livestream.cc @@ -8,10 +8,15 @@ LiveStream::LiveStream(QObject *parent) : AbstractStream(parent, true) { util::create_directories(path, 0755); fs.reset(new std::ofstream(path + "/rlog" , std::ios::binary | std::ios::out)); } - stream_thread = new QThread(this); QObject::connect(stream_thread, &QThread::started, [=]() { streamThread(); }); QObject::connect(stream_thread, &QThread::finished, stream_thread, &QThread::deleteLater); +} + +void LiveStream::startStreamThread() { + // delay the start of the thread to avoid calling startStreamThread + // in the constructor when other classes' slots have not been connected to + // the signals of the livestream. QTimer::singleShot(0, [this]() { stream_thread->start(); }); } diff --git a/tools/cabana/streams/livestream.h b/tools/cabana/streams/livestream.h index de476be396..a13c8352f5 100644 --- a/tools/cabana/streams/livestream.h +++ b/tools/cabana/streams/livestream.h @@ -14,6 +14,7 @@ public: double getSpeed() override { return speed_; } bool isPaused() const override { return pause_; } void pause(bool pause) override; + void startStreamThread(); protected: virtual void handleEvent(Event *evt); diff --git a/tools/cabana/streams/pandastream.cc b/tools/cabana/streams/pandastream.cc index 7b1bc28354..ce50671b20 100644 --- a/tools/cabana/streams/pandastream.cc +++ b/tools/cabana/streams/pandastream.cc @@ -13,6 +13,7 @@ PandaStream::PandaStream(QObject *parent, PandaStreamConfig config_) : config(co if (!connect()) { throw std::runtime_error("Failed to connect to panda"); } + startStreamThread(); } bool PandaStream::connect() {