Здравствуйте.
Моя программа должна работать по схеме.
По вызову метода старт - создаётся поток, в котором есть сокет, биндящийся на порт. Вся его задача состоит в том, что он слушает и пишет пришедшие пакеты в очередь, которая является как бы буфером между ним и потоком читальщиком. Я хочу, чтобы просходило так: он пишет в очередь, другой поток забирает из очереди, что-то делает и пишет в файл. Но не могу понять, как, где и по какому принципу создать второй поток. не могу понять, как сделать так, чтобы тот всё время пытался прочитать данные из очереди.
Т.е. работать они не должны синхронно, не один за другим: первый записал, второй сразу прочитал, а асинхронно: сколько-то первый записал, второй сколько-то прочитал. Классическая задача, но если я справился с "составление буфера", то совсем не могу понять, как создать тот самый второй поток и какая у него должна быть начинка для вот постоянных попыток чтения из "буфера". Привожу код, который я написал.
#include <QCoreApplication>
#include "logikazdes.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
logikazdes server;
return a.exec();
}
#include "logikazdes.h"
logikazdes::logikazdes(QObject *parent) : QObject(parent)
{
// ====== Поток для запис в очередь ======
qDebug() << QObject::thread();
QThread *thread = new QThread;
writetoqueue *queue = new writetoqueue();
queue->moveToThread(thread);
connect(thread, SIGNAL(started()), queue, SLOT(start()));
connect(queue, SIGNAL(finish()), thread, SLOT(quit()));
connect(queue,SIGNAL(finish()), queue, SLOT(deleteLater()));
connect(thread,SIGNAL(finished()),thread, SLOT(deleteLater()));
connect(queue,SIGNAL(enqueueQueue(QByteArray)),this,SLOT(enque(QByteArray)));
thread->start();
//======================================
}
void logikazdes::enque(QByteArray datagram)
{
o4ered.enqueue(datagram);
qDebug() << o4ered.size();
}
#include "writetoqueue.h"
writetoqueue::writetoqueue(QObject *parent) : QObject(parent)
{
}
void writetoqueue::start()
{
socket = new QUdpSocket(this);
socket->bind(1111);
connect(socket, SIGNAL(readyRead()), SLOT(read()));
}
void writetoqueue::read()
{
QByteArray datagram;
while (socket->hasPendingDatagrams())
{
datagram.resize(socket->pendingDatagramSize());
socket->readDatagram(datagram.data(), datagram.size());
qDebug() << datagram;
emit enqueueQueue(datagram);
qDebug() << QObject::thread();
}
}
Так вот как организовать работу 2 потока, который должен забирать из очереди эти данные и их обрабатывать? Желательно, ответьте кодом с пояснениями. Надеюсь задачу я понятно описал. Заранее спасибо