我是 Qt 的新手,正在尝试学习 Qt 线程机制。我的情况是,我希望后台线程执行一些长时间运行的任务,并在处理完每 100 个项目后将结果报告给另一个(或主)线程。现在,我通过从后台线程发出一个信号来执行此操作,该信号包含在主线程的插槽中接收到的已处理对象的列表。Qt 在插槽中接收到信号参数时是否会复制它?如果是这样,呼叫如何qRegisterMetaType
帮助解决这个问题?这就是我要在我的代码中完成的事情:
//background thread
void run(){
//get a query object from database
int fireCount = 0;
QList< QList<QVariant> > data;
while(query->next()){
fireCount++;
QList<QVariant> row;
//do some calculations on the fields read from the query
processRow(query,&row);
data.append(row);
if(fireCount>100){
emit publishDataToMainThread(data);
fireCount = 0;
data.clear();
}
}
}
//slot in main thread
void receiveData(QList< QList<Qvariant> > data){
\\display the data
}
另外,这是在线程之间传输对象的推荐做法吗?