Один из распространенных способов передачи данных (настроенных) между потоками - это отправка данных в качестве параметра сигнала / слота между потоками. Это влечет за собой копирование данных.
Интересно, смогу ли я переместить данные обратно в основной поток до завершения рабочего потока и просто передать указатель на объект данных в сигнале / слоте, чтобы избежать копирования данных? Что-то вроде ниже. Будет ли работать без копирования данных?
В рабочей теме:
workerStart()
{
MyData* data=new MyData();
...
data->moveToThread(MainThread); //data will be deleted as thread function finish if not move to main thread?
Q_EMIT ImDone(data);
}
В слоте основного потока, который подключается к сигналу ImDone Worker:
WorkerDone(MyData* data)
{
// use data via pointer
}