Russian Qt Forum
Ноябрь 23, 2024, 02:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: пересобрать QT с конфигурацией -UQT_NO_EXCEPTIONS  (Прочитано 4722 раз)
bronstein87
Гость
« : Май 16, 2017, 14:23 »

Здравствуйте. Мне необходимо собрать Qt с отключенным QT_NO_EXCEPTION, чтобы исключения генерировались в классах Qt. Подскажите, как осуществить пересборку?
ОС: Win7, компилятор mingw-32
« Последнее редактирование: Май 16, 2017, 14:27 от bronstein87 » Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Май 16, 2017, 15:32 »

а что этим будет достигнуто ?
Записан
bronstein87
Гость
« Ответ #2 : Май 16, 2017, 15:47 »

а что этим будет достигнуто ?

Код:
767	#ifdef QT_NO_EXCEPTIONS
768 #  if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
769 #    define Q_CHECK_PTR(p) qt_noop()
770 #  else
771 #    define Q_CHECK_PTR(p) do {if(!(p))qt_check_pointer(__FILE__,__LINE__);} while (0)
772 #  endif
773 #else
774 #  define Q_CHECK_PTR(p) do { if (!(p)) qBadAlloc(); } while (0)
775 #endif

Q_CHECK_PTR будет пробрасывать bad_alloc, а не вызывать версию с qt_check_pointer, которая вызывает qFatal() и абортит программу. В общем, внутри классов Qt где реализована возможность проброса исключения - это будет сделано.
« Последнее редактирование: Май 16, 2017, 15:58 от bronstein87 » Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Май 16, 2017, 16:19 »

и часто именно qt классы абортят программу ?
у меня обычно этот делает мой код )
всеже не пойму выгоды исключений тут, рабочие примеры есть ?
Записан
bronstein87
Гость
« Ответ #4 : Май 16, 2017, 16:39 »

и часто именно qt классы абортят программу ?
у меня обычно этот делает мой код )
всеже не пойму выгоды исключений тут, рабочие примеры есть ?
Моя программа строит большое количество графиков (QChart) по большим объемам данных.
При передаче chart-а на ChartView с помощью setChart() происходят аллокации векторов в больших объемах (краем глаза глядет исходники, в суть не вникал),
в случае нехватки памяти программа абортится, что никак меня не устраивает. Я хочу реализовать поведение через исключения, заключающееся в том, что при нехватке памяти Q_CHECK_PTR бросит bad_alloc, а в catch() я просто очищу часть памяти, что позволит программе продолжить работу а уже построенным графикам жить, а не завершится через abort().
« Последнее редактирование: Май 16, 2017, 16:41 от bronstein87 » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Май 16, 2017, 16:58 »

Цитировать
Моя программа строит большое количество графиков (QChart) по большим объемам данных.

Используйте Qwt вместо этого тормознутого QChart и будет все хорошо.
Записан

ArchLinux x86_64 / Win10 64 bit
bronstein87
Гость
« Ответ #6 : Май 16, 2017, 17:18 »

Цитировать
Моя программа строит большое количество графиков (QChart) по большим объемам данных.

Используйте Qwt вместо этого тормознутого QChart и будет все хорошо.

Возможно, вы правы. Но уже очень много написано с использованием QChart, так что сейчас это не вариант. Вы можете подсказать что-нибудь по вопросу в названии темы?
И еще вопрос, в чем по-вашему заключается его тормознутость ? Сейчас сижу на версии 5.9, вроде работает вполне прилично.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Май 16, 2017, 18:25 »

Цитировать
Вы можете подсказать что-нибудь по вопросу в названии темы?

Нет, ничего нового не скажу.

Цитировать
И еще вопрос, в чем по-вашему заключается его тормознутость ?

А сравните-ка потребление памяти, потребление CPU при отрисовке, да и вообще, анимации.

Из личного опыта - если нужно использовать прокрутку, зум, и что-то наподобие графиков реального времени
(когда новые данные отображаются по мере их поступления и шкала времени сдвигается), то QtCharts ооочень сильно
проседает и вообще ведет себя неадекватно (например, рисует всякую ересь или вообще перестает отрисовывать
данные в надлежащем виде).

Например, их пример "осциллограф" работает... Но, стоит немного модифицировать его так, чтобы шкала времени-X
менялась, то появляются проблемы. Также, в QtCharts нет возможности выбрать интересующий интервал с данными
по их значениям (например, хотим посмотреть данные с 10-й по 11-ю секунды), там есть только что-то наподобие
скроллинга, где выбирается "на сколько пикселей" прокрутить влево, вправо, вверх или вниз.. бррр..

Я недавно с дуру тоже было взял QtCharts (дай, думаю попробую, вроде-ж он был коммерческий, значит проверенный
и шустрый, думал я). и тут хрясь -такой облом... жрет памяти немерено, жрет CPU (~20-30% чтобы перерисовать 200
точечек каждые ~50 мсек). И при том, имеется утечка памяти, при которой, оно выедает всю RAM со временем.
Ай яй яй, думаю, что-же я наделал!!! Улыбающийся А проект то вот вот уже надо здавать!!!

В итоге плюнул и переписал все на Qwt, все шустро, загрузка ~1-2%, жрет ~5Mb и доволен как слон (жаль что нет
биндингов для QML)..

PS: Вот такая история.. лично я бы не советовал QtCharts, по крайней мере для отображения большого кол-ва
динамических данных.. оно совершенно не подходит для этого, ИМХО (какашка в красивой обертке).

PS: Так что не факт, что с устранением QT_NO_EXCEPTIONS будет лучше... это все борьба со следствием проблемы,
а не с ее причиной. Подмигивающий
« Последнее редактирование: Май 16, 2017, 18:28 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #8 : Май 16, 2017, 18:41 »

в случае нехватки памяти программа абортится, что никак меня не устраивает.

а что делать если памяти нет, просить пользователя сбегать в магазин ? )
или ждать пока освободится ?
свопа тоже нет ?
Записан
bronstein87
Гость
« Ответ #9 : Май 17, 2017, 19:47 »

в случае нехватки памяти программа абортится, что никак меня не устраивает.

а что делать если памяти нет, просить пользователя сбегать в магазин ? )
или ждать пока освободится ?
свопа тоже нет ?

Если памяти нет, пусть строит графики по меньшим интервалам.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #10 : Май 18, 2017, 08:53 »

Если памяти нет, пусть строит графики по меньшим интервалам.

это если программа на это расчитана

я вообще не знаю как корректно отрабатывать нехватку памяти
это может случиться в любом месте, все не предусмотреть, пока считаю лучше упасть с коркой
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 23.