C++代码实例Qt线程实现两盒线程一收一发
时间: 2023-09-28 20:12:38 浏览: 96
以下是一个简单的示例代码,演示了如何使用Qt实现两个线程之间的通信,一个线程用于发送数据,另一个线程用于接收数据。
```
#include <QtWidgets>
#include <QThread>
// 数据发送线程
class SenderThread : public QThread {
Q_OBJECT
public:
SenderThread(QObject *parent = nullptr) : QThread(parent) {}
signals:
void dataReady(const QString &data);
protected:
void run() override {
// 发送数据
for (int i = 0; i < 10; i++) {
QString data = QString("Data %1").arg(i);
emit dataReady(data);
QThread::msleep(500);
}
}
};
// 数据接收线程
class ReceiverThread : public QThread {
Q_OBJECT
public:
ReceiverThread(QObject *parent = nullptr) : QThread(parent) {}
signals:
void dataReceived(const QString &data);
protected:
void run() override {
// 接收数据
for (int i = 0; i < 10; i++) {
QString data = QString("Data %1").arg(i);
emit dataReceived(data);
QThread::msleep(500);
}
}
};
// 主窗口
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
// 创建发送线程和接收线程
senderThread = new SenderThread(this);
receiverThread = new ReceiverThread(this);
// 连接信号和槽
connect(senderThread, &SenderThread::dataReady, receiverThread, &ReceiverThread::dataReceived);
// 启动线程
senderThread->start();
receiverThread->start();
}
private:
SenderThread *senderThread;
ReceiverThread *receiverThread;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}
#include "main.moc"
```
在这个示例中,我们创建了一个 `SenderThread` 类和一个 `ReceiverThread` 类,分别用于发送和接收数据。这两个线程都定义了一个信号,用于在数据准备好时发出通知。在主窗口中,我们创建了这两个线程的实例,并将它们的信号和槽连接起来。这样,当 `SenderThread` 发送数据时,它会发出 `dataReady` 信号,然后 `ReceiverThread` 就会接收到这个信号,并调用 `dataReceived` 槽来接收数据。最后,我们启动了这两个线程,并且在主窗口中显示出来。
阅读全文