Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511

Ошибка работы Qt: this application has requested the runtime to terminate it in an unusual way

28.10.2019, 08:58. Показов 7605. Ответов 21

Студворк — интернет-сервис помощи студентам
Добрый день, при работе программы периодически возникает ошибка:
This application has requested the runtime to terminate it in an unusual way.
Гуглил, там в основном решается добавлением qwindows.dll в папку с exe файлом, однако данная проблема возникает как на стадии отладки, так и при релизе программы, несмотря на то, что все dll добавлены.
Следовательно причина в другом.
Программа осуществляет прием данных с ком порта, их преобразование и запись в csv файл.
Опытным путем заметил, что ошибка вылетает при выполнении этой части кода:
C++ (Qt)
1
2
3
4
    if(data.size()!=16){
        qDebug() << "Uncorrect data size create16BitArray!";
        throw "Uncorrect data size!";
    }
А так же, когда приходят данные некорректного размера. Данные идут от микроконтроллера. Т.е. основные ситуации, когда такое происходит: слишком быстро идут данные, на ножках МК неизвестный уровень (т.е. они подвешены в воздухе), помехи связанные с проводами и тд. Собственно проблема в том, что при вылете данной ошибки программа продолжает принимать данные, обрабатывать и записывать их, за исключением данных, пришедших с ошибкой, но вылетает данная ошибка и блокирует управляющие кнопки программы, т.е. уже с ПК в МК ничего не отправить, и при закрытии ошибки программа закрывается.

Код программы:
main.cpp
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "mainwindow.h"
#include <QApplication>
 
//---------------------------------------------------------------
#include <QLabel>
#include <QFile>
#include <QTextStream>
//---------------------------------------------------------------
 
void ControlHavingFile (void);
void writeToFileHeaders(const QString &path1);
void writeToFileReady(const QString &path2);
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
 
//---------------------------------------------------------------
// Write headers to the csv file
   //control of having the test file for data
   ControlHavingFile();
   //write csv headers to file
   writeToFileHeaders("C:/Users/Dmitry/Desktop/ADC Qt/ADC_UART/Test.csv");
   //write begining time and ready to file
   writeToFileReady("C:/Users/Dmitry/Desktop/ADC Qt/ADC_UART/Test.csv");
//---------------------------------------------------------------
 
    return a.exec();
}

mainwindow.cpp

Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
//-----------------------------------------------------------------
// USART
#include <QSerialPort>
#include <QDebug>
 
// Conversion of array
#include <QtCore>
#include <QCoreApplication>
 
// USART
static QSerialPort *serial;
//-----------------------------------------------------------------
 
//-----------------------------------------------------------------
// Function definition
void ControlHavingFile (void);
void writeToFileHeaders(const QString &path1);
void writeToFileReady(const QString &path2);
QVector<quint16> create16BitArray(const QByteArray& data);
QString createCsvLine(const QVector<quint16>& data);
void writeToFile(const QStringList& lines, const QString& path);
//-----------------------------------------------------------------
 
//-----------------------------------------------------------------
// Create variables
uint32_t LineData = 1;
uint32_t a = 0;
uint8_t SendSignal = 0;
 
QByteArray data;
//data << 0x00 << 0x01 << 0x02  << 0x03 << 0x04  << 0x05  << 0x06  << 0x07  << 0x08; // и т.д.
//-----------------------------------------------------------------
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//-----------------------------------------------------------------
// USART
   serial = new QSerialPort(this);
   serial->setPortName("com3");
   serial->setBaudRate(QSerialPort::Baud9600);
   serial->setDataBits(QSerialPort::Data8);
   serial->setParity(QSerialPort::NoParity);
   serial->setStopBits(QSerialPort::OneStop);
   serial->setFlowControl(QSerialPort::NoFlowControl);
   serial->open(QIODevice::ReadWrite);
   connect(serial, SIGNAL(readyRead()), this, SLOT(serialReceived()));
//-----------------------------------------------------------------
}
 
MainWindow::~MainWindow()
{
    delete ui;
//-----------------------------------------------------------------
    serial->close();                                        // UART
//-----------------------------------------------------------------
}
 
//-----------------------------------------------------------------
// USART
void MainWindow::serialReceived()
{
    while(serial->canReadLine())
      {
        LineData++;
 
        //receiving USART data
        QByteArray sourceResult = serial->readLine().trimmed();
 
        //convert it to 16-bit array
        QVector<quint16> convertedData=create16BitArray(sourceResult);
 
        //create one csv line
        QString line=createCsvLine(convertedData);
 
        //insert one csv line to csv lines list
        QStringList csvLines;
        csvLines.push_back(line);
 
        //write csv lines to file
        writeToFile(csvLines, "C:/Users/Dmitry/Desktop/ADC Qt/ADC_UART/Test.csv");
 
        qDebug() << "completed...";
        qDebug() << convertedData;
        qDebug() << sourceResult;
      }
}
//-----------------------------------------------------------------
 
 
//-----------------------------------------------------------------
void ControlHavingFile (void)
{
    if(QFile::exists("C:/Users/Dmitry/Desktop/ADC Qt/ADC_UART/Test.csv"))
    {
       qDebug() << "Файл существует и будет перезаписан";
    }
    else
    {
       qDebug() << "Файл отсутствует и будет создан";
    }
}
//-----------------------------------------------------------------
 
 
//-----------------------------------------------------------------
void writeToFileHeaders(const QString &path1)
{
    QStringList headers;
    headers << "Time" << "Sensor1" << "Sensor2" << "Sensor3" << "Sensor4"
                      << "Sensor5" << "Sensor6" << "Sensor7" << "Sensor8";
    QFile file(path1);
    if(file.open(QIODevice::WriteOnly)){
        QTextStream stream(&file);
        stream << headers.join(';');
        file.close();
    }
}
//-----------------------------------------------------------------
 
 
//-----------------------------------------------------------------
void writeToFileReady(const QString &path2)
{
    QString result;
    result.append(QTime::currentTime().toString());
 
    QStringList headers;
    headers << "Ready" << "Ready" << "Ready" << "Ready"
            << "Ready" << "Ready" << "Ready" << "Ready";
    QFile file(path2);
    if(file.open(QIODevice::Append)){
        QTextStream stream(&file);
        stream << "\r\n";
        stream << result.append(";");
        stream << headers.join(';');
        file.close();
    }
}
//-----------------------------------------------------------------
 
 
//-----------------------------------------------------------------
QVector<quint16> create16BitArray(const QByteArray &data)
{
    if(data.size()!=16){
        qDebug() << "Uncorrect data size create16BitArray!";
        throw "Uncorrect data size!";
    }
 
    QVector<quint16> result;
    for(int i=0;i<data.size(); i+=2){
        quint16 value=(quint8)(data.at(i)) << 8;
        value+=(quint8)data.at(i+1);
 
        result.push_back(value);
    }
    return result;
}
//-----------------------------------------------------------------
 
 
//-----------------------------------------------------------------
QString createCsvLine(const QVector<quint16> &data)
{
    if(data.size()!=8){
        qDebug() << "Uncorrect data size createCsvLine!";
        throw "Uncorrect data size!";
    }
    QString result;
    result.append(QTime::currentTime().toString());
    result.append(";");
 
    foreach(quint16 ch, data){
        result.append(QString::number(ch));
        result.append(";");
    }
    return result;
}
//-----------------------------------------------------------------
 
 
//-----------------------------------------------------------------
void writeToFile(const QStringList &lines, const QString &path)
{
    QFile file(path);
 
    if(file.open(QIODevice::Append))
    {
        QTextStream stream(&file);
        foreach(QString line, lines)
        {
            stream << "\r\n";
            stream << line;
        }
        file.close();
    }
}
//-----------------------------------------------------------------
 
 
void MainWindow::on_pushButton_2_clicked()
{
    char cmd = 0x01;
    serial->write(&cmd, sizeof(cmd));
    qDebug() << 10;
}
 
void MainWindow::on_pushButton_3_clicked()
{
    char cmd = 0x02;
    serial->write(&cmd, sizeof(cmd));
    qDebug() << 100;
}
 
void MainWindow::on_pushButton_4_clicked()
{
    char cmd = 0x03;
    serial->write(&cmd, sizeof(cmd));
    qDebug() << 600;
}
 
void MainWindow::on_pushButton_5_clicked()
{
    char cmd = 0x04;
    serial->write(&cmd, sizeof(cmd));
    qDebug() << "Stop";
}

Вопрос: как можно решить данную проблему или что прикрутить к коду, чтобы как-то отфильтровывать такие данные?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.10.2019, 08:58
Ответы с готовыми решениями:

This application has requested the Runtime to terminate it in an unusual way
Короче постоянно на разных функциях(QWaitCondition::wait | QMessageBox) вылетает ошибка This application has requested the Runtime to...

this application has requested the runtime to terminate it in an unusual way
При создании больших циклов(более 1000) возникает данная ошибка this application has requested the runtime to terminate it in an unusual...

Ошибка "this application has requested the Runtime to terminate it in an unusual way"
При компиляции возникаетoшибка &quot;this application has requested the Runtime to terminate it in an unusual way...&quot; код программы простой...

21
фрилансер
 Аватар для Алексей1153
6504 / 5749 / 1134
Регистрация: 11.10.2019
Сообщений: 15,397
28.10.2019, 12:35
Студворк — интернет-сервис помощи студентам
DmitryDDDD, я как-то пробовал такое организовать, но не взлетело, я даже не помню, по какой причине. Вроде бы оно всё вытаскивается из потока, но потом это же всё надо обратно сдвигать, парсер получается гораздо сложнее и тормознее. Если есть желание, можешь поразбираться. Но я бы не стал связываться )
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
28.10.2019, 12:47  [ТС]
Алексей1153, ладно, спасибо за помощь), я попробую разобраться в том, что вы скинули и прикрутить к имеющемуся коду, а с этими проверками я думаю пока повременю, пока нет смысла сильно усложнять то, что выполняет свои функции
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2019, 12:47

FIFA Manager 09: This application has requested the Runtime to terminate
Я маласть поиграю и игру выкидывает причём там ошибка от Microsoft Visual c ++ : Как решить эту проблему : Что делать помогите...

Runtime ошибка - terminate called after throwing an instance of 'std::out_of_range'
Пишу что-то вроде компилятора. Так как никакой литературы по созданию компилятора не читал в моём коде появляються кучи Костылей и...

Ошибка ADODB.Recordset error '800a0e78' The operation requested by the application is not allowed if the object is closed.
Podskazhite, pochemu u menya posle vipolneniya vseh zadaniy pri popitke vipolnit' sleduyushiy kod vidaetsa oshibka: MyRS.Close Set...

ошибка: 'Run-time error 3705. The operation requested by the application is not allowed if the object is open.'
Private Sub cmdPrint_Click() DataForGaranty.Garanty.ConnectionString = 'Provider=Microsoft.Jet.OLEDB.3.51;Persist Security...

This app requiested Runtime to terminate
Здравствуйте! У меня возникла очень странная проблема: выскакивает вот такое чудо при запуске моей программы И что самое главное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru