Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Koptina
0 / 0 / 0
Регистрация: 30.09.2017
Сообщений: 171
#1

Debug assertion failure

01.03.2018, 10:31. Просмотров 140. Ответов 1

Здравствуйте:

Программа:
класс server: создаёт потоки. в которых консьюмер и продюсер работают
класс profucer: с сокета читает и пишет в очередь
класс consumer: читает с очереди и выводит что-то на экран
vars: глобальные переменные

Когда закрываю программу, которая успела что-то вывести, всё ок. Когда не успела, то возникает вот такая ошибка. В чём проблема?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef VARS_H
#define VARS_H
 
#include <QtCore>
 
extern QQueue<QByteArray> que;
extern QWaitCondition queNotEmpty;
extern QMutex mutex;
extern QVector<QQueue<QByteArray>> vector;
extern QHash<QString,QQueue<QByteArray>*> IP_Queue;
 
 
#endif // VARS_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
#include "vars.h"
 
#include <QtCore>
 
QQueue<QByteArray> que;
QWaitCondition queNotEmpty;
QMutex mutex;
QVector<QQueue<QByteArray>> vector;
QHash<QString,QQueue<QByteArray>*> IP_Queue;
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <QCoreApplication>
#include <QObject>
#include <QUdpSocket>
#include "server.h"
#include "consumer.h"
 
 
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    server serv;
    serv.start();
 
 
    return a.exec();
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef SERVER_H
#define SERVER_H
 
#include <QObject>
#include <QThread>
#include <QWaitCondition>
#include <QQueue>
 
class server : public QObject
{
    Q_OBJECT
public:
    explicit server(QObject *parent = 0);
 
public slots:
    void start();
 
 
};
 
#endif // SERVER_H
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 "server.h"
#include "producer.h"
#include "consumer.h"
 
server::server(QObject *parent) : QObject(parent)
{
 
}
 
void server::start(){
    QThread *thread = new QThread;
    producer *prod = new producer();
    prod->moveToThread(thread);
    QObject::connect(thread,SIGNAL(started()), prod, SLOT(start()));
    QObject::connect(prod,SIGNAL(finish()),thread,SLOT(quit()));
    QObject::connect (thread,SIGNAL(finished()),thread, SLOT(deleteLater()));
    QObject::connect(prod,SIGNAL(finish()),prod,SLOT(deleteLater()));
    thread->start();
 
    QThread *thread1 = new QThread;
    consumer *cons = new consumer();
    cons->moveToThread(thread1);
    QObject::connect(thread1,SIGNAL(started()), cons, SLOT(start()));
    QObject::connect(cons,SIGNAL(finish()),thread1,SLOT(quit()));
    QObject::connect(thread1, SIGNAL(finished()),thread1,SLOT(deleteLater()));
    QObject::connect(cons,SIGNAL(finish()),cons,SLOT(deleteLater()));
    thread1->start();
 
 
 
}
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
#ifndef PRODUCER_H
#define PRODUCER_H
 
#include <QObject>
#include <QUdpSocket>
#include <QWaitCondition>
#include <QQueue>
 
class producer : public QObject
{
    Q_OBJECT
public:
    explicit producer(QObject *parent = 0);
private:
    QUdpSocket *socket;
signals:
    void finish();
public slots:
    void start();
    void read();
};
 
#endif // PRODUCER_H
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
#include "producer.h"
#include "vars.h"
 
producer::producer(QObject *parent) : QObject(parent)
{
 
}
 
void producer::start(){
    socket = new QUdpSocket;
    socket->bind(1234);
    connect (socket, SIGNAL(readyRead()), SLOT(read()));
}
 
 
void producer::read(){
 
 
    QByteArray datagram;
 
    while (socket->hasPendingDatagrams()){
 
        datagram.resize(socket->pendingDatagramSize());
         socket->readDatagram(datagram.data(), datagram.size());
 
 
         mutex.lock();
    
         que.enqueue(datagram);
        
         queNotEmpty.wakeAll();
         mutex.unlock();
 
}
}
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
#ifndef CONSUMER_H
#define CONSUMER_H
 
#include <QObject>
#include <QThread>
 
class consumer : public QObject
{
    Q_OBJECT
public:
    explicit consumer(QObject *parent = 0);
    void stop();
private:
    QString IPaddress;
    bool isStarted = 1;
signals:
    void finish();
public slots:
    void start();
 
};
 
#endif // CONSUMER_H
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
#include "consumer.h"
#include "vars.h"
 
consumer::consumer(QObject *parent) : QObject(parent)
{
 
    IPaddress = "127.0.0.1";
 
}
 
void consumer::start(){
 
    while (isStarted) {
 
    mutex.lock();
 
          if (que.isEmpty())
       queNotEmpty.wait(&mutex); 
 
        qDebug() << que.dequeue();
    mutex.unlock();
 
}
    emit finish();
}
 
void consumer::stop()
{
       isStarted = 0;
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Миниатюры
Debug assertion failure  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2018, 10:31
Ответы с готовыми решениями:

Qt failure in QList
QList&lt;elective&gt; listOfElective и Student student объявлены в main как...

Assert failure in qlist
При дебаге вылетает ошибка

Ошибка: failure in QCoreApplication::sendEvent. Многопоточность
При выполении следующего кода, появляется ошибка в консоли: ASSERT failure in...

Debug и release
Добрый день. проблема в следующем - в режиме Debug программа работает...

Не запускается приложение в debug
Отлаживаю в qt creator все нормально... запускается.. но когда в папке exe...

1
icpu
468 / 350 / 88
Регистрация: 10.03.2011
Сообщений: 1,483
Записей в блоге: 4
01.03.2018, 11:23 #2
Нажмите "Повтор", вам откроют отладчик с меткой в той строке, на которой вы навернулись. Справа будут все переменные из вашего контекста, их значение и тип. Снизу слева будет окно стека вызовов, там будет список класс->метод, двойным нажатием на который вы перейдёте в него.

Даже ванговать ничего не хочу.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2018, 11:23

Debug/qrc_resources.cpp error 1
Из-за чего может быть эта ошибка?

Ошибка в qt: [debug/main.o] Error 1
Только что поставил qt SDK, при компиляции любого проекта выводит ошибку: ...

Debug работает, Release валится
написал программку - RSS-фильтр поскольку изначально была задумка получения...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru