QThread 线程传递参数
时间: 2024-10-10 09:02:53 浏览: 29
QThread是Qt中提供的一种高级线程机制,用于在主线程之外运行耗时的操作,保持UI的响应速度。在QThread中,从主线程向派生的子线程传递参数有两种常见的方式:
1. **构造函数参数**:如果你知道哪些参数会在子线程的生命周期内始终存在,可以在创建QThread时将其作为构造函数参数传递给子线程对象。例如:
```cpp
QThread workerThread;
WorkerClass* myWorker = new WorkerClass(param1, param2);
workerThread.start(QThread::PriorityNormal, myWorker);
```
在这里,`param1`和`param2`将在`WorkerClass`中可用。
2. **队列消息**:另一种方法是使用`QQueue`将数据放入,然后在线程开始之前再取出。例如:
```cpp
QQueue<QVariant> dataQueue;
dataQueue.enqueue(param1);
dataQueue.enqueue(param2);
WorkerClass* myWorker = new WorkerClass(this); // 需要一个指向主线程的指针,以便发送信号
myWorker->moveToThread(&workerThread);
workerThread.finished.connect([this, myWorker] {
delete myWorker;
});
workerThread.start();
// 在子线程中接收并处理数据
while (!dataQueue.isEmpty()) {
QVariant param = dataQueue.dequeue();
myWorker->processParam(param);
}
```
在上述代码中,主线程先将参数放入队列,子线程启动后从队列读取数据进行处理。
阅读全文