Доброй ночи!
Пишу многопоточную программу с исключениями. Рабочие потоки бросают исключения. Судя по документации, класс QException обеспечивает передачу исключений между потоками.
У меня не получается этого достичь - в основном потоке исключения не ловятся.
C++ (Qt)
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
try
{
MainWindow w;
w.show();
Worker worker;
QObject::connect(&worker, &Worker::showInt, &w, &MainWindow::showInt, Qt::QueuedConnection);
QThread thread;
worker.moveToThread(&thread);
thread.start();
return a.exec();
}
catch (Exception & e)
{
QMessageBox::warning(0, "", "");
}
}
Объект worker раз в секунду посылает сигнал, по которому в главном окне увеличивается счетчик. Через 5 секунд worker бросает исключение. Exception - наследник QException.
C++ (Qt)
Worker::Worker(QObject *parent)
: QObject(parent)
{
m_timer.setSingleShot(false);
m_timer.setInterval(1000);
connect(&m_timer, &QTimer::timeout, this, &Worker::update);
m_timer.start();
m_counter = 0;
}
void Worker::update()
{
if (m_counter > 4)
{
throw Exception("some message");
}
m_counter++;
emit showInt(m_counter);
}
Возникает окно "R6010 - abort() has been called".
Что я делаю не так? Как правильно пользоваться QException для передачи между потоками?
Смотрел в qexception.cpp, ничего не понял. Как оно работает?
Прикладываю минимальный проект.