私は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
}
また、これはスレッド間でオブジェクトを転送するための推奨される方法ですか?