在Linux环境下使用C++和Qt进行多线程开发,涉及多个基础概念和技术点。以下是对这一主题的全面解答:
以下是一个简单的Qt多线程示例,使用QThread类:
#include <QCoreApplication>
#include <QThread>
#include <QDebug>
class Worker : public QObject {
Q_OBJECT
public slots:
void doWork() {
qDebug() << "Worker thread:" << QThread::currentThreadId();
// 模拟耗时操作
QThread::sleep(5);
emit workFinished();
}
signals:
void workFinished();
};
class WorkerThread : public QThread {
Q_OBJECT
protected:
void run() override {
Worker worker;
connect(this, &WorkerThread::started, &worker, &Worker::doWork);
connect(&worker, &Worker::workFinished, this, &WorkerThread::quit);
connect(&worker, &Worker::workFinished, &worker, &Worker::deleteLater);
connect(this, &WorkerThread::finished, this, &WorkerThread::deleteLater);
exec();
}
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
WorkerThread thread;
qDebug() << "Main thread:" << QThread::currentThreadId();
thread.start();
return a.exec();
}
#include "main.moc"
#include <QMutex>
class SharedData {
public:
void setData(int value) {
QMutexLocker locker(&mutex);
data = value;
}
int getData() {
QMutexLocker locker(&mutex);
return data;
}
private:
int data;
QMutex mutex;
};
#include <QtConcurrent/QtConcurrentRun>
#include <QFuture>
void process(int value) {
// 处理数据
}
int main() {
QFuture<void> future = QtConcurrent::run(process, 42);
// 等待任务完成
future.waitForFinished();
return 0;
}
通过以上内容,你可以对Linux环境下使用C++和Qt进行多线程开发有一个全面的了解。
领取专属 10元无门槛券
手把手带您无忧上云