Ошибка SIGSEGV в многопоточном приложении Qt при закрытииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка SIGSEGV в многопоточном приложении Qt при закрытии

Сообщение Anonymous »

Я разрабатываю приложение Qt для сбора данных, поступающих от полуавтоматического анализатора, который отправляет данные на последовательный порт RS-232 при получении нового результата. Для этого у меня есть QThread, который обрабатывает передачу через последовательный порт. Я не могу понять, почему в режиме отладки всегда выдается ошибка SIGSEGV, когда я закрываю приложение (вы можете заметить этот сбой, только если посмотрите окно ApplicationOuput).
MainWindow::MainWindow(QWidget *parent) )...

Код: Выделить всё

connect(&m_listeningThread, &ListeningThread::failOpenPort, this, MainWindow::on_listeningthread_failopen);
connect(&m_listeningThread, &ListeningThread::listeningActive, this, &MainWindow::on_listeningthread_started);
connect(&m_listeningThread, &ListeningThread::notFoundPort, this, &MainWindow::on_listeningthread_notfoundport);
connect(&m_listeningThread, &ListeningThread::listenStop, this, &MainWindow::on_listeningthread_stopped);
connect(&m_listeningThread, &ListeningThread::resultReceived, this, &MainWindow::on_listeningthread_resultListened);
m_listeningThread.OpenPort();
MainWindow::closeEvent

Код: Выделить всё

PersonalMsgBox myMsg;
myMsg.setMessage(tr("Do you really want to shut down?"));
myMsg.setIcon(PERSMSG_ICON_QUESTION);
myMsg.setType(PERSMSG_YESNO);
int ans=myMsg.exec();
if(ans==0)
{
event->ignore();
return;
}

m_listeningThread.ClosePort();
while(m_listeningThread.m_bActive);
if(m_listeningThread.isRunning())
m_listeningThread.terminate();
m_listeningThread.wait(5000);
//while(!m_listeningThread.isFinished());
//delete &m_listeningThread;

//chiudi il database
m_MyDatabase.close();
void MainWindow::on_listeningthread_started():

Код: Выделить всё

 m_listeningThread.start();  //lo start vero e proprio devo darlo esplicitamente
ui->label_statolistening->setText(tr("Waiting for result..."));
ListeningThread::ListeningThread()

Код: Выделить всё

m_bActive = false;
ListeningThread::run()

Код: Выделить всё

while(m_bActive)
{
if(!bGetResultPacket(1000))
continue;
else
{
int index_dollaro = m_GlobalReceiver.indexOf('$');
if(index_dollaro >= 0)
{
QByteArray arrayRisultato, rimanenza;
int gip=0;
for(gip=0;gip

Подробнее здесь: [url]https://stackoverflow.com/questions/79346235/sigsegv-error-in-qt-multithread-application-when-closing[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»