На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Ошибка построения MTW при использовании mapMessageEnable(0)

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Ошибка построения MTW при использовании mapMessageEnable(0)
 
Добрый день!

ОС AstraLinux 1.4
ГИС Конструктор Free 11

MAPACCESSVERSION 20160605
MAPAPIVERSION 0x0111304

При создании матриц высот с подавлением сообщений mapMessageEnable(0)) не получается завершить построение.
При анализе ситуации было выявлено, что при построении матрицы ГИС Оператором возникает сообщение о том, что имеются объекты с неверной высотой и предложением продолжить или остановить построение матрицы.
Если выбрать "Продолжить", то матрица завершает построение корректно.

В приложении при использовании ГИС Конструктор для той же карты с теми же параметрами построения матрицы возникают следующие проблемы:
Если использовать QDMapCreateMtw, то процесс построения завершается без создания матрицы, при этом в LOG файле будет записано, что построение матрицы отменено пользователем.
При построении матрицы с помощью API метода mapBuildMtwwUn() в отдельном потоке происходит зависание (бесконечный цикл) с постоянной выдачей сообщения от  HWND handle со следующими значениями параметров:
Код
messageHandler(hwnd, code, p1, p2, typemsg): 0 1409 12 0 0
Как можно обойти эту проблему при построении матриц в отдельном потоке? К примеру вопрос использования 3D объектов можно явно передать как параметр в структуре BUILDMTW.
И есть ли возможность обойти проблему при использовании QDMapCreateMtw без применения mapMessageEnable(1).
 
Здравствуйте!
Для проведения тестирования предоставьте, пожалуйста, небольшой пример и данные на которых возможно воспроизведение данного поведения. Данные можно прислать на почту panorama@gisinfo.ru с ссылкой на сообщение с форума.  

 
Добрый день.
Выслал архив с примером.
Проект собирается под Qt4. В комплекте идёт корректная карта Noginsk и  её версия содержащая объект с ошибочной высотой Noginsk_bad.
В примере две ситуации создание матрицы высот: через применение QDMapCreateMtw и с использование mapBuildMtwUn в отдельном потоке.
 
Здравствуйте!

Спасибо за предоставленный пример. Провели проверку на крайних версиях ГИС Конструктор 11 и 14  – создание матрицы в отдельном потоке происходит без зависания.
Поскольку техническая поддержка 11 версии была прекращена – рекомендуем использовать актуальную версию продукта.
 
Добрый день.
А проблема с завершением построения матрицы при выключенном mapMessageEnabled(0) воспроизводится?
 

При запуске приложения с включенным выводом сообщений об ошибках на экран (mapMessageEnable(1)) в отдельном потоке произойдет вывод диалога Qt не из главного графического потока.
Данное поведение приведет к прекращению работы приложения, потому что вывод диалоговых окон не из графического потока является некорректным с точки зрения использования библиотек Qt.

На текущий момент возможны следующие варианты изменений в ГИС-приложении:
- отключить вывод сообщений с помощью вызова mapMessageEnable(0);
- установить собственную функцию вывод сообщения об ошибках, не использующую диалоговые окна Qt, с помощью функции mapSetMessageBoxCall() (mapapi.h).
Пример использования собственной функции вывода сообщения об ошибках можно посмотреть в примере mapview из состава инсталляции.

Автоматическое определение работы в потоке и отключения вывода сообщений c помощью диалогов Qt будет рассмотрено в одной из следующих версий ГИС Конструктор.

Изменено: Константин Ганюшин - 12.09.2022 11:41:58 (уточнил пример)
 
Цитата
Константин Ганюшин написал:
 При запуске приложения с включенным выводом сообщений об ошибках на экран (mapMessageEnable(1)) в отдельном потоке произойдет вывод диалога Qt не из главного графического потока.
Данное поведение приведет к прекращению работы приложения, потому что вывод диалоговых окон не из графического потока является некорректным с точки зрения использования библиотек Qt.

На текущий момент возможны следующие варианты изменений в ГИС-приложении:
- отключить вывод сообщений с помощью вызова mapMessageEnable(0);
- установить собственную функцию вывод сообщения об ошибках, не использующую диалоговые окна Qt, с помощью функции mapSetMessageBoxCall() (mapapi.h).
Пример использования собственной функции вывода сообщения об ошибках можно посмотреть в примере mapview из состава инсталляции.

Автоматическое определение работы в потоке и отключения вывода сообщений c помощью диалогов Qt будет рассмотрено в одной из следующих версий ГИС Конструктор.
Знаете, сколько я не пишу вам об ошибках, всё время получаю странные ответы не полностью отвечающие на заданные вопросы, по всей видимости по другому у вас не принято.
Так вот. Если вы ещё раз перечитаете моё последнее сообщение, то вы увидите там вопрос:

Проблема с завершением построения матрицы при выключенном mapMessageEnabled(0) воспроизводится?


И сразу второй вопрос за ним:


Если воспроизводится, какое будет поведение при использовании более свежих библиотек  ГИС Конструктор версии 12, 13 и 14? Такое же или можно ожидать завершения работы с построенной матрицей?



Заранее спасибо.
 
Здравствуйте!

Привожу более сжатый вариант ответа на вопрос о поведении функции построения матрицы по карте mapBuildMtwwUn() при включенном выводе сообщений об ошибках на экран ("выключенный mapMessageEnable(0)"):
- при запуске функции в отдельном потоке вывод сообщения об ошибке приведет к завершению приложения в связи с особенностями использования библиотек Qt. Более подробное описание причины и обходные пути использования приведены выше. В дальнейшем планируем доработать функцию, чтобы она корректно выводила сообщение на экран в отдельном потоке;
- на текущий момент поддерживается актуальная версия ГИС Конструктор 14 - проверки выполняются на данной версии.
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности