В рабочем потоке я могу переместить объект данных в основной поток, чтобы избежать копирования данных - PullRequest
0 голосов
/ 02 мая 2019

Один из распространенных способов передачи данных (настроенных) между потоками - это отправка данных в качестве параметра сигнала / слота между потоками. Это влечет за собой копирование данных.

Интересно, смогу ли я переместить данные обратно в основной поток до завершения рабочего потока и просто передать указатель на объект данных в сигнале / слоте, чтобы избежать копирования данных? Что-то вроде ниже. Будет ли работать без копирования данных?

В рабочей теме:

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
}
...