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

mapPaintByFrameToXImagePro и многопоточность

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2
RSS
mapPaintByFrameToXImagePro и многопоточность
 
Цитата
Vladimir Letov написал:
Почему-то не пришло письмо.. Попробуйте продублировать на kbpanorama at yandex.ru

Переслал
 
Для меня текст примера не очень читабельный.


Должна быть отдельная процедура потока, которая выполняет отрисовку фрагмента.
В ней нет никаких циклов для той задачи, что Вы описываете (если только для имитации нагрузки).
Ресурсы HPAINT обычно создаются до вызова потоков, которые их используют.

Для отрисовки области экрана в потоках нужно учитывать, что время отрисовки 10 000 и 20 000 объектов будет практически одинаковым.
Нормально потоки начинают влиять, когда Вы рисуете в потоке не экран, а 10 на 10 экранов (тайлов) в одном потоке и столько же в другом потоке.

Чтобы заработало деление экрана нужно включить применение дерева объектов, которое внутри ядра будет каждому потоку сразу отбирать те объекты, что входят в его область.
Код
   // Запретить/Разрешить построение дерева объектов для отображения всех карт
   // Построение дерева замедляет (от долей секунды до нескольких секунд) открытие
   // неотсортированных карт с большим числом объектов (от нескольких сот тысяч и более),
   // но ускоряет (в 1,5 - 3 раза) отображение больших карт в крупных масштабах
   // (отбор объектов для фрагмента)
   // Дерево объектов обычно применяется для серверных приложений или индикаторов,
   // длительно работающих с постоянным набором карт и интенсивным отображением
   // flag - признак применения дерева объектов (если не ноль)
   // Возвращает ранее установленное значение

   _MAPIMP long int _MAPAPI mapSetFrameTree(long int flag);
 
Цитата
Oleg Belenkov написал:

Чтобы заработало деление экрана нужно включить применение дерева объектов, которое внутри ядра будет каждому потоку сразу отбирать те объекты, что входят в его область.
Код
    // Запретить/Разрешить построение дерева объектов для отображения всех карт
   // Построение дерева замедляет (от долей секунды до нескольких секунд) открытие
   // неотсортированных карт с большим числом объектов (от нескольких сот тысяч и более),
   // но ускоряет (в 1,5 - 3 раза) отображение больших карт в крупных масштабах
   // (отбор объектов для фрагмента)
   // Дерево объектов обычно применяется для серверных приложений или индикаторов,
   // длительно работающих с постоянным набором карт и интенсивным отображением
   // flag - признак применения дерева объектов (если не ноль)
   // Возвращает ранее установленное значение

   _MAPIMP long int _MAPAPI mapSetFrameTree(long int flag); 

Это отличный совет, только такой функции нет.
Когда она появилась?

Цитата
У меня лицензионная версия ГИС Конструктора для Qt Designer x64 версия 12, Qt 4, Qt 5, ОС "Astra Linux.." ... "x64".
 
В ядре версии 12.5.4 (с 16.03.2018) и в ГИС Конструктор 12.3.2 (12.3.1) такая функция есть.
 
Цитата
Oleg Belenkov написал:
Должна быть отдельная процедура потока, которая выполняет отрисовку фрагмента.В ней нет никаких циклов для той задачи

Не совсем понял, упрощенно код приведенный начиная со строчки std::thread
выглядит так:

Код
void funcion_running_in_separate_thread()
{
    for (;;) {
       auto req = message_queue.wait_new_render_request();
       mapPaintByFrameToXImagePro();
       signal_to_main_thread_rendering_done();
   }
}


Конечно без цикла не обойтись.
Я не хочу создавать и удалять поток каждый кадр,

Или не создание потоков на каждый кадр что-то ломает?
 
Я не сразу прочитал комментарий -
//! количество итераций для более точного замера времени static const size_t N = 5;

Можно организовывать потоки разными способами. Ограничений нет.
Чтобы получить выигрыш во времени от новых потоков, они должны быть относительно "тяжелыми", то есть выполнять длительные задачи.
Операцию, которая занимает от десятков до сотни миллисекунд, тяжело ускорить потоками.
Страницы: Пред. 1 2
Читают тему (гостей: 1)



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

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