qt5多线程发送数据,主线程接收数据。在主线程中比较收到的数据类型,值,时间是否一致
时间: 2023-10-21 07:03:31 浏览: 125
QT多线程编程、主线程与子线程交互数据
5星 · 资源好评率100%
可以使用Qt中的信号与槽机制来实现多线程发送数据并在主线程中接收并比较数据。具体实现步骤如下:
1. 在子线程中定义一个信号,用于发送数据。例如:
```
signals:
void dataReady(int type, int value, QDateTime time);
```
2. 在子线程中,当需要发送数据时,通过该信号发送:
```
emit dataReady(type, value, QDateTime::currentDateTime());
```
3. 在主线程中,连接该信号到一个槽函数。在该槽函数中进行数据的比较。例如:
```
connect(workerThread, &WorkerThread::dataReady, this, &MainWindow::handleData);
```
```
void MainWindow::handleData(int type, int value, QDateTime time)
{
// 进行数据的比较
if (type == expectedType && value == expectedValue && time == expectedTime) {
// 数据一致,执行相应操作
}
}
```
其中,`expectedType`、`expectedValue`和`expectedTime`是在主线程中预先设置好的期望值。当子线程发送的数据与预期值一致时,就执行相应的操作。
4. 在主线程中启动子线程,并等待子线程结束。
完整代码示例如下:
```
class WorkerThread : public QThread
{
Q_OBJECT
signals:
void dataReady(int type, int value, QDateTime time);
public:
void run() override {
// 发送数据
while (true) {
int type = generateType();
int value = generateValue();
emit dataReady(type, value, QDateTime::currentDateTime());
msleep(1000);
}
}
private:
int generateType() const {
// 随机生成类型
static std::default_random_engine e(std::chrono::system_clock::now().time_since_epoch().count());
static std::uniform_int_distribution<int> d(1, 10);
return d(e);
}
int generateValue() const {
// 随机生成值
static std::default_random_engine e(std::chrono::system_clock::now().time_since_epoch().count());
static std::uniform_int_distribution<int> d(1, 100);
return d(e);
}
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr)
: QMainWindow(parent)
{
// 设置期望值
expectedType = 5;
expectedValue = 50;
expectedTime = QDateTime::currentDateTime();
// 创建子线程
workerThread = new WorkerThread(this);
connect(workerThread, &WorkerThread::dataReady, this, &MainWindow::handleData);
// 启动子线程
workerThread->start();
}
~MainWindow() override {
// 等待子线程结束
workerThread->quit();
workerThread->wait();
}
private slots:
void handleData(int type, int value, QDateTime time)
{
// 进行数据的比较
if (type == expectedType && value == expectedValue && time == expectedTime) {
// 数据一致,执行相应操作
qDebug() << "Data received: type=" << type << ", value=" << value << ", time=" << time;
}
}
private:
WorkerThread *workerThread;
int expectedType;
int expectedValue;
QDateTime expectedTime;
};
```
阅读全文