DataReceiver работает на QThread. Когда QThread запускается, вызывается DataReceiver:run(), который повторяется до тех пор, пока не будет получен приказ остановиться с помощьюatomic_bool.
Код: Выделить всё
DataReceiver::run()
{
this->stop = false;
while(!stop)
{
//Receive data
emit data_ready(data);
}
}
Вот как будет выглядеть DataHandler.h:
Код: Выделить всё
class DataHandler
{
public:
DataHandler();
~DataHandler();
private:
QThread data_processing_thread;
QThread data_receiver_thread;
DataReceiver data_receiver;
DataProcessor data_processor;
};
Код: Выделить всё
DataHandler::DataHandler() {
connect(&data_receiver_thread, &QThread::started, &data_receiver,
&DataReceiver::run);
connect(&data_receiver, &DataReceiver::data_ready, &data_processor,
&DataProcessor::process);
data_receiver.moveToThead(&data_receiver_thread);
data_processor.moveToThread(&data_processor_thread)
data_receiver_thread.start();
data_processor_thread.start();
}
Код: Выделить всё
DataHandler::~DataHandler() {
data_receiver.stop = true; // Signal the data_receiver to while loop to stop
data_receiver_thread.quit();
data_receiver_thread.wait();
data_processor_thread.quit();
data_processor_thread.wait();
} //data_receiver and data_processor will go out of scope here
Они очищаются, когда data_processor или когда объект data_processor_thread выходит за пределы области действия? Есть ли лучший способ аккуратно выйти? При остановке я хочу, чтобы оставшиеся ожидающие сигналы были отменены, чтобы мы могли остановиться как можно быстрее.
Причина вопроса заключается в том, что документации по управлению памятью не так много, и я хочу постараться максимально избежать утечек памяти.
Подробнее здесь: https://stackoverflow.com/questions/764 ... on-signals
Мобильная версия