Ребят, сразу скажу я новичок в области многопоточности и Qt. Есть простая задача, а решить не получается до конца. Пишу сокращённый участок кода классов.
Есть
Import - класс, в котором решается определённая логика при работе с БД и выдаются постоянные сообщения через сигнал
message.
C++ (Qt)
class Import : public QObject
{
Q_OBJECT
public:
explicit Import(QObject *parent = 0);
~Import();
public slots:
void conv(const QString & cod)
{
emit message(tr("Start..."));
loadChild(cod);
emit message(tr("Finish..."));
}
signals:
void message(const QString &);
private:
loadChild(const QString &cod)
// рекурсия
{
QSqlQuery query;
if (query.exec("....")) {
while (query.next()) {
emit message(tr("Load %1").arg(cod));
loadChild(query.value(0).toString());
}
}
}
};
Создаётся этот класс в потоке
ImportThread:
C++ (Qt)
class ImportThread : public QThread
{
Q_OBJECT
public:
ImportThread(QObject *parent = 0);
void runConv(const QString &cod)
{
emit convSignal(cod);
}
void run()
{
Import *import = new Import();
connect (import, SIGNAL(message(const QString &)), this, SIGNAL(message(const QString &)));
connect (this, SIGNAL(convSignal(const QString &)), import, SIGNAL(conv(const QString &)));
exec();
}
signals:
void message(const QString&);
void convSignal(const QString &);
};
Далее в GUI стартует поток, всё как положено Вызываю
runConv....выполняются в БД запросы и сыплются
message на форму. Но в определённый моменты эти
message перестают приходить, но при этом вся работа в БД завершается корректно. Общее количество циклов в функции
loadChild - около
2000. Количество присланных
message около
1300. Почему так происходит? Ткните носом и скажите, что не так! Спасибо!