Je pense à la manière de transmettre les données de résultat d'un thread de travail au client sans les copier. Le travailleur vit dans un autre thread et BigData hérite de QObject. Mon idée est de changer la propriété des données:QThread transmet les données de résultat à MainThread
class Worker: public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = 0): QObject(parent);
signals:
void resultReady(BigData *data);
public slots:
void doWork() {
BigData *data = new BigData(this); // alloc new Data
while (!dataReady) {
... // appending data
}
// Data ready
// clearing ownership
data->setParent(NULL); // data can't be moved to another thread with parent
data->moveToThread(NULL);
emit resultReady(data);
}
};
void MainWindow::handleResult(BigData *data)
{
if (currentData_) {
delete currentData_;
}
data->setParent(this); // set new ownership
// works only if data's thread is NULL
data->moveToThread(QApplication::instance()->thread());
currentData_ = data;
}
Est-ce que ça a l'air bien? Ou y at-il une façon plus appropriée de le faire?
Y a-t-il une raison pour que la classe 'BigData' hérite de' QObject'? A-t-il ses propres signaux/slots? – Mike
Non, j'utilise simplement QObject car la destruction automatique de BigData sur la destruction de ses parents est très pratique. – Sorcerer