Всем привет.
Есть приложение со следующей структурой.
Гуи + Первый поток + Второй поток
В первом потоке я работаю с сокетами: авторизую клиентов, принимаю от них данные и передаю на обработку Второму потоку.
Второй поток получая команды от Первого потока вызывает микропрограммы, запустив дожидается результата их работы и полученные данные от работы микропрограмм пересылает в Первый поток и этот уже в свою очередь отправляет полученные данные клиентам.
Вот кусок кода во Втором потоке:
C++ (Qt)
void ProcessingThread::processingCmd(QString ident, QByteArray data)
{
QString buf(data);
emit toLog("Processing thread receive " + buf);
QProcess *proc = new QProcess;
connect(proc, SIGNAL(started()), this, SLOT(onProcStarted()));
connect(proc, SIGNAL(readyReadStandardOutput()), this, SLOT(onProcReadyReadOut()));
connect(proc, SIGNAL(readyReadStandardError()), this, SLOT(onProcReadyReadErr()));
connect(proc, SIGNAL(finished(int)), this, SLOT(onProcFinished()));
proc->moveToThread(this);
if (data.contains("EXECUTE"))
{
emit toLog("Has EXECUTE");
QStringList lstArg;
QString bf;
bf.append("EXECUTE");
lstArg.append(bf);
proc->start("./mprg_execute", lstArg);
mapMPRG.insert(ident, proc);
}
}
Здесь я в параметрах функции получаю имя Клиента и Команду и далее смотря что за команда запускаю микропрограмму. Если закомментить строку
proc->moveToThread(this);
, то сигнал
started() у QProcess испускается дважды, отсюда следует, что МПРГ запустилась дважды, а если раскоментить
proc->moveToThread(this);
, то всё работает прекрасно.
Объясните, пожалуйста, в чем фишка?
Буду очень рад помощи