qt多线程共享数据例子
时间: 2023-09-22 19:10:15 浏览: 100
好的,这个问题我可以帮您解答。以下是一个简单的 QT 多线程共享数据的示例:
首先,在主线程中创建一个共享变量:
```
QMutex mutex;
int sharedValue = 0;
```
然后,在多线程中访问该变量时,必须使用信号和槽机制:
```
class WorkerThread : public QThread
{
Q_OBJECT
public:
void run() override {
for (int i = 0; i < 100; i++) {
mutex.lock();
sharedValue++;
mutex.unlock();
emit valueChanged(sharedValue);
}
}
signals:
void valueChanged(int value);
private:
QMutex mutex;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
workerThread = new WorkerThread;
connect(workerThread, &WorkerThread::valueChanged, this, &MainWindow::onValueChanged);
workerThread->start();
}
private slots:
void onValueChanged(int value) {
ui->label->setText(QString("Shared Value: %1").arg(value));
}
private:
Ui::MainWindow *ui;
WorkerThread *workerThread;
};
```
在该示例中,WorkerThread 类是一个 QThread 子类,它通过锁定互斥量来确保 sharedValue 变量在多线程访问时是安全的。同时,它使用了 Qt 的信号和槽机制来通知主线程共享变量的值已经发生了变化。
主窗口类 MainWindow 则负责创建 WorkerThread 线程并将其连接到共享变量的更新事件上。每当共享变量的值发生变化时,MainWindow 将更新其 UI,以显示共享变量的最新值。
希望这个示例能解答您的问题!如有其他疑问,请随时提出。
阅读全文