В Qt приложении пи запуске таймеров и в основном и в отдельном потоке, программа падает. Можно ли это делать и как сделать корректно?
Падает при нескольких поочердных срабатываниях таймеров с такой ошибкой:
ASSERT: "bytes <= bufferSize" in file tools\qringbuffer.cpp, line 74
Текст программы:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MainObject* mObject=new MainObject();
QThread* tThread=new QThread;
SecondObject* sObject=new SecondObject();
QObject::connect(tThread, SIGNAL(started()) , sObject, SLOT(startTimer()));
sObject->moveToThread(tThread);
tThread->start();
return a.exec();
}
MainObject::MainObject(QObject *parent) : QObject(parent)
{
mTimer=new QTimer(this);
connect(mTimer, SIGNAL(timeout()), this, SLOT(mSlot()));
mTimer->start(500);
qDebug()<<"this->thread="<<this->thread()<<"mTimer->thread()="<<mTimer->thread();
}
void MainObject::mSlot()
{
qDebug()<<"this->thread="<<this->thread();
}
SecondObject::SecondObject(QObject *parent) : QObject(parent)
{
qDebug()<<"this->thread="<<this->thread();
}
void SecondObject::sSlot()
{
qDebug()<<"thread="<<this->thread();
}
void SecondObject::startTimer()
{
QTimer* sTimer=new QTimer(this);
qDebug()<<"this->thread="<<this->thread()<<"sTimer->thread()="<<sTimer->thread();
connect(sTimer, SIGNAL(timeout()), this, SLOT(sSlot()));
sTimer->start(1000);
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники