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

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

Страниц: 1 ... 5 6 [7]   Вниз
  Печать  
Автор Тема: Light Plot2D  (Прочитано 61775 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #90 : Июль 26, 2010, 21:44 »

Тут же проблема как разбить QPixmap для рисования и как создать ту универсальную функцию (поток) для отрисовки информации, а дальше экспериментировать с количеством потоков (для лучшего результата). И ещё подсчёт координат точек логично разпоточить, если вектор будет содержать более 1000 точек (отловить ифом).
Оптимальное количество ниток давно известно: это кол-во ядер процессора(ов) + 1 (главная нитка). 1000 (1K) точек - это просто несерьезно при таких малых операциях над ними. Возможно положительный эффект начнется с 50-100К точек, да и то с компилятором Intel. Разбивать QPixMap никак не надо, просто пусть каждая нитка рисует свои линии (на том же QPixMap) - интересно что из этого получится
Записан
daimon
Гость
« Ответ #91 : Июль 26, 2010, 22:04 »

Тут же проблема как разбить QPixmap для рисования и как создать ту универсальную функцию (поток) для отрисовки информации, а дальше экспериментировать с количеством потоков (для лучшего результата). И ещё подсчёт координат точек логично разпоточить, если вектор будет содержать более 1000 точек (отловить ифом).
Оптимальное количество ниток давно известно: это кол-во ядер процессора(ов) + 1 (главная нитка). 1000 (1K) точек - это просто несерьезно при таких малых операциях над ними. Возможно положительный эффект начнется с 50-100К точек, да и то с компилятором Intel. Разбивать QPixMap никак не надо, просто пусть каждая нитка рисует свои линии (на том же QPixMap) - интересно что из этого получится
Тут же  надо не забывать про потокобезопасность - ведь один пикмеп рисуется!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #92 : Июль 26, 2010, 22:15 »

Тут же  надо не забывать про потокобезопасность - ведь один пикмеп рисуется!
Так вот именно - на этом форуме я слышал, что, мол, рисовать на экране - только из главной нитки. Это не вызывает сомнений. А вот рисовать в буфер - пожалуйста из любой нитки. Здесь не знаю. m_ax имеет хорошую возможность проверить
Записан
daimon
Гость
« Ответ #93 : Июль 27, 2010, 22:18 »

Как создать ту универсальную функцию отрисовки пиксмепа для потока?
Наверное:
1. Площадь отрисовки (координаты);
2 Указатель на объект пиксмепа;
3 Как-то указать информацию для отрисовки (вот не знаю как).
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #94 : Июль 27, 2010, 22:46 »

Цитировать
Как создать ту универсальную функцию отрисовки пиксмепа для потока?
Наверное:
1. Площадь отрисовки (координаты);
2 Указатель на объект пиксмепа;
3 Как-то указать информацию для отрисовки (вот не знаю как).

Да не)) Всё проще)
1) Пишете класс вашего потока (унаследованный от QThread)
2) Данный класс, ясен пень, будет лишь эмитеть сигналы, в конкретном случае только один, с аргументом QPixmap (смотрим пример с Мандэльбротом)
3) При событиях, провоцирующих перерисовку вызываем метод start нашего потока, а в конструкторе (plottera) соединяем сигнал окончания выполнения потока с update..
Это так: в общих чертах..

Теперь, реализовав всё это смотрим что получается:
1) Вариант без потоков:
    Делаем зум) Тянем мышь, появляется рубербенд -> отпускаем мышь -> ждём некоторое время (GUI - замирает, пихмап перерисовывается) -> отрисованный пиксмап появляется (GUI оживает) Мы радуемся)))

2) Вариант с потоками:
    Делаем зум) Тянем мышь, появляется рубербенд -> отпускаем мышь -> ждём некоторое время (GUI - НЕ замирает, хотя пиксмап перерисовывается) -> отрисованный пиксмап появляется. Мы радуемся)))

Это вариант с одним ядром)

Ради интереса, такое замутить можно (с потоками), но ответим себе на такой вопрос - правильное ли это будет решение? То бишь оно того стоит?

P.S. Я, наверное из любопытства это сделаю, но пока занимаюсь другим - то что нужно очень срочно написать, и заниматься lightplot2d пока времени особо нет((   

     
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
daimon
Гость
« Ответ #95 : Июль 28, 2010, 00:57 »

Цитировать
Как создать ту универсальную функцию отрисовки пиксмепа для потока?
Наверное:
1. Площадь отрисовки (координаты);
2 Указатель на объект пиксмепа;
3 Как-то указать информацию для отрисовки (вот не знаю как).

Да не)) Всё проще)
1) Пишете класс вашего потока (унаследованный от QThread)
2) Данный класс, ясен пень, будет лишь эмитеть сигналы, в конкретном случае только один, с аргументом QPixmap (смотрим пример с Мандэльбротом)
3) При событиях, провоцирующих перерисовку вызываем метод start нашего потока, а в конструкторе (plottera) соединяем сигнал окончания выполнения потока с update..
Это так: в общих чертах..

Теперь, реализовав всё это смотрим что получается:
1) Вариант без потоков:
    Делаем зум) Тянем мышь, появляется рубербенд -> отпускаем мышь -> ждём некоторое время (GUI - замирает, пихмап перерисовывается) -> отрисованный пиксмап появляется (GUI оживает) Мы радуемся)))

2) Вариант с потоками:
    Делаем зум) Тянем мышь, появляется рубербенд -> отпускаем мышь -> ждём некоторое время (GUI - НЕ замирает, хотя пиксмап перерисовывается) -> отрисованный пиксмап появляется. Мы радуемся)))

Это вариант с одним ядром)

Ради интереса, такое замутить можно (с потоками), но ответим себе на такой вопрос - правильное ли это будет решение? То бишь оно того стоит?

P.S. Я, наверное из любопытства это сделаю, но пока занимаюсь другим - то что нужно очень срочно написать, и заниматься lightplot2d пока времени особо нет((  

    
Да но один поток должен быть, чтобы не умирал GUI. А за потоки - даже на Nokia 5530 XM заметна разница в быстродействии - один поток и 3 потока сразу в 25%(так была проверка под Qt Symbian)
« Последнее редактирование: Июль 28, 2010, 01:15 от daimon » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #96 : Октябрь 19, 2010, 11:56 »

Выкладываю пример использования lightplot2d. (эдакий форк на  на одну из первых реализаций)
Пример требует предустановленного lightplot2d, разумеется.

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

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
nixman05
Гость
« Ответ #97 : Ноябрь 04, 2010, 23:43 »

Сама библиотека скомпилировалась кое-как. А пример не собирается: либо ошибка на этапе линковки, либо падает при запуске.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #98 : Ноябрь 05, 2010, 13:21 »

Цитировать
Сама библиотека скомпилировалась кое-как. А пример не собирается: либо ошибка на этапе линковки, либо падает при запуске.
Ну я не телепат) Поподробнее опишите ситуацию. Что за ось, как собирали, какие ошибки ну и т.д.   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
nixman05
Гость
« Ответ #99 : Ноябрь 05, 2010, 23:38 »

Цитировать
Сама библиотека скомпилировалась кое-как. А пример не собирается: либо ошибка на этапе линковки, либо падает при запуске.
Ну я не телепат) Поподробнее опишите ситуацию. Что за ось, как собирали, какие ошибки ну и т.д.   
Ось WinXP. ошибки на этапе выполнения. Валится при запуске.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #100 : Ноябрь 05, 2010, 23:59 »

Цитировать
Сама библиотека скомпилировалась кое-как. А пример не собирается: либо ошибка на этапе линковки, либо падает при запуске.
Ну я не телепат) Поподробнее опишите ситуацию. Что за ось, как собирали, какие ошибки ну и т.д.   
Ось WinXP. ошибки на этапе выполнения. Валится при запуске.

Подправил.
Перед тем как будете компилировать, убедитесь, что путь указанный в plotter.pro, а именно
Код
C++ (Qt)
LP2D_LIB = c:/lightplot2d-1.0.1/lib
LP2D_INCLUDE = c:/lightplot2d-1.0.1/include
 
действительно указаны правильно.
После компиляции, если всё правильно сделано, должен получиться exe шник, в папке bin. Но, он не запуститься, поскольку линковщик не сможет найти либы от lightplot2d. Не расстраивайтесь: нужно к экзешнику просто кинуть получившуюся dll (lightplot2d1.dll) и запустить Plotter заново.
Всё должно получиться)
 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
nixman05
Гость
« Ответ #101 : Ноябрь 06, 2010, 00:16 »

Я так и делал. Попробую с новой версией.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #102 : Ноябрь 06, 2010, 00:22 »

А ещё хотел спросить:
Цитировать
Сама библиотека скомпилировалась кое-как.
В смысле кое-как? Как вы её компилировали?
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: 1 ... 5 6 [7]   Вверх
  Печать  
 
Перейти в:  


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