#include <QObject>
#include <QTimer>
#include<QDebug>
class DataSender : public QObject {
Q_OBJECT
public:
DataSender(QObject *parent = nullptr) : QObject(parent)
{
connect(&timer, &QTimer::timeout, this, &DataSender::sendData);
timer.start(1);
}
signals:
void dataReady(const QString &data);
private slots:
void sendData() {
static int count = 0;
emit dataReady(QString("Data %1").arg(++count));
qDebug()<<"Send Data:"<<count;
if(count==6)
{
timer.stop();
}
}
private:
QTimer timer;
};
#include <QObject>
#include <QQueue>
#include <QDebug>
#include<QTimer>
#include<QThread>
class DataReceiver : public QObject {
Q_OBJECT
public:
DataReceiver(QObject *parent = nullptr) : QObject(parent) {
connect(&timer,&QTimer::timeout,this,&DataReceiver::processData);
timer.start(50);
}
public slots:
void receiveData(const QString &data) {
dataQueue.enqueue(data);
qDebug()<<"dataQueue: "<<dataQueue.size();
}
void processData() {
qDebug()<<"**************idle***************";
if (!dataQueue.isEmpty() && !isProcessing) {
isProcessing = true;
QString dataToProcess = dataQueue.dequeue();
QThread::msleep(2000);
qDebug() << "Processed:" << dataToProcess;
isProcessing = false;
processData();
}
}
private:
QQueue<QString> dataQueue;
bool isProcessing = false;
QTimer timer;
};
#include <QObject>
#include <QQueue>
#include <QDebug>
#include<QTimer>
#include<QThread>
class DataReceiver : public QObject {
Q_OBJECT
public:
DataReceiver(QObject *parent = nullptr) : QObject(parent) {
}
public slots:
void receiveData(const QString &data) {
dataQueue.enqueue(data);
qDebug()<<"dataQueue: "<<dataQueue.size();
processData();
}
void processData() {
qDebug()<<"**************idle***************";
if (!dataQueue.isEmpty() && !isProcessing) {
isProcessing = true;
QString dataToProcess = dataQueue.dequeue();
QThread::msleep(3000);
qDebug() << "Processed:" << dataToProcess;
isProcessing = false;
processData();
}
}
private:
QQueue<QString> dataQueue;
bool isProcessing = false;
};
#include <QCoreApplication>
#include "datasender.h"
#include "datarecieve.h"
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
DataSender sender;
DataReceiver receiver;
QObject::connect(&sender, &DataSender::dataReady, &receiver, &DataReceiver::receiveData,Qt::QueuedConnection);
return a.exec();
}