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

Как быстро отключить прикладную программу от Panorama GIS Server

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2 3 4 5 След.
RSS
Как быстро отключить прикладную программу от Panorama GIS Server, MapGisServer1.CloseConnect(1);
 
Цитата
Денис Вицко написал:
ГИС Сервер 8.3 мягко говоря, устарел.
Денис, это удобная и стабильная версия. По этой же причине, работаем в DelphiXE 5
 
Почему у Вас есть уверенность, что висит именно закрытие соединения с ГИС Сервером? Может приложение еще какие действия выполняет?
 
Цитата
Денис Вицко написал:
if (mapCanCloseConnect(Order) > 0)   // можно закрыть?       mapCloseConnect(Order);    else       ::MessageBoxW(0,"Ошибка", "Есть открытые данные у соединения", MB_OK | MB_ICONWARNING | MB_TASKMODAL);
If (mapCanCloseConnect(1) > 0) then
     form_main.MapGisServer1.CloseConnect(1)
 else
     ShowMessage('Есть открытые данные у соединения');

Не помогло.
Программа видит, что есть открытые данные,
и пытается их закрыть.
Но при этом так и захватывает дискриптор программы на 30 секунд. Для нас это много.
Нам нужно сразу отключиться от ГИС Сервера.
 
Вы перед mapCanCloseConnect данные закрываете все?
Надо пройтись по всем mapview, mapscreen и закрыть данные.
Изменено: Andrey Gheleznyakov - 05.04.2022 17:08:23
 
Цитата
Andrey Gheleznyakov написал:
Вы перед mapCanCloseConnect данные закрываете все?Надо пройтись по всем mapview, mapscreen и закрыть данные.
// Закрываем созданный для этой карты контекст
mapDeleteSelectContext(hselN);

form_main.mvMap.MapView := false;
form_main.mvMap.MapClose;
 
Итак:
1.не смотря на form_main.mvMap.MapClose;
команда mapCanCloseConnect(1) выдает, что есть открытые данные или нет?
2. есть ли понимание на какой строчке (функции) идет ожидание 30 сек?
 
Цитата
Andrey Gheleznyakov написал:
есть ли понимание на какой строчке (функции) идет ожидание 30 сек?
Программа полностью закрывается. Проверка утечки памяти показывает, что все объекты закрыты.
Все происходит штатно. Но, в процессах остается "висеть" программа. Ровно через 30 секунд, она сама закрывается в процессах.
Есть подозрение, что ГИС Сервер еще дает о себе знать ровно 30 секунд и только после этого дискриптор программы отпускается операционной системой.
 
Проверил на примере \Example\delphi\gserver\ из состава GTK 14 c ГИС Сервером 8.7.7 (более ранней 8 версии не нашел), карта Ногинска.

Процесс освобождается мгновенно.

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

Просьба проверить на штатном примере, и простых картах (из примеров данных для  ГИС Сервера, например).
 
Наметилось понимание вопроса.
Так при запуске предыдущей версии прикладной программы,
отключение от ГИС Сервера происходит действительно мгновенно.
Осталось разобраться, что именно добавлено в последнюю версию
прикладной программы, что заставляет ее удерживать дискриптор 30 секунд.
Пока только компонент для импорта/экспорта в Geojson.
Разбираюсь.
Изменено: Сергей Викторович - 07.04.2022 09:34:33
 
В присланных Вами текстах открытие соединения выполняется дважды:
Цитата

If Form1.MapGisServer1.OpenConnect(strHost, GISPort) <> 0 then
begin

If (Form1.MapGisServer1.StringToHash(strPassw, strPassw)<>0) then
resbool := Form1.MapGisServer1.RegisterUser(Form1.MapGisServer1.OpenConnect(strHost, GISPort), strLogin, strPassw);

 Try
 alias := Form1.MapGisServer1.BuildAliasName(Form1.MapGisServer1.HostName[1], Form1.MapGisServer1.PortNumber[1], alias);
 Form1.mvMap.MapOpen(alias, true);
 except
 ShowMessage ('Не удалось подключиться к ГИС Серверу.');
 end;

Причем пользователя Вы регистрируете для второго соединения, а далее вся работа идет через первое соединение.
У Вас в коде нет закрытия ни первого, ни второго соединения.

Примитивный пример модуля с подключением к ГИС Серверу (с Вашим тестовым ГИС Сервером отключение происходит мгновенно):
Скрытый текст



Но, даже если в Вашем коде поправить открытие и закрытие соединений, задержка при выгрузке приложения всё равно остается.
А вот если закомментировать все остальное (кроме открытия соединения и карты с ГИС Сервера) проблема исчезает.
Из чего делаем вывод, что проблема не в ГИС Сервере.


PS
несколько раз бесконтрольно (есть уже или нет) вызывается создание HSELECT:
mapCreateMapSelectContext(Form1.mvMap.MapHandle);  // Создание нового контекста поиска
и ни разу не освобождается!
Изменено: Денис Вицко - 07.04.2022 11:31:32 (увидел еще ошибку в тексте - mapCreateMapSelectContext)
Страницы: Пред. 1 2 3 4 5 След.
Читают тему (гостей: 1)



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

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