Отговори на тема  [ 26 мнения ]  Отиди на страница Предишна  1, 2
GUI библиотечки за мултиплатформени приложения? 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 8492
Местоположение: Добрич
Мнение Re: GUI библиотечки за мултиплатформени приложения?
Не разбрах кои са тия различни технологии?

В момента нямам чак толкова технологични неща. Няколко стари тулчета и то там проблема е че всяко е преправяно, преправяно с годините и е малко мазало, но все гледам да мина по тънката лайсна без да се пренаписва. Сега при прехода към Qt ще се наложи да се пренапише. Нядявам се няма да е сложно, в смисъл примерно едното тулче му трябват две нишки, едната да си говори по сериен канал и някакво протоколче, другата да опреснява GUI-то - да покаже дали и какво устройство е видяло отсреща, евентуално едно прогрес барче после... Нищо сложно, даже не съм сигурен дали ще ми трябва втора нишка, още не съм стигнал до слотовете и сигналите на Qt...


Пон Яну 06, 2014 8:51 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Дек 19, 2005 11:21 am
Мнения: 1007
Мнение Re: GUI библиотечки за мултиплатформени приложения?
miro_atc написа:
Нищо сложно, даже не съм сигурен дали ще ми трябва втора нишка, още не съм стигнал до слотовете и сигналите на Qt...


Най-вероятно няма да ти трябва втора нишка. В Qt общо взето идеята е всичко да става асинхронно. Пускаш някаква мрежова заявка и се връщаш в главния event loop. После като пристигнат някакви данни, получаваш сигнал и ги обработваш и пак се връщаш.

Поне мрежовите функции имат и блокиращи и неблокиращи версии, така че може да си избереш кои да ползваш. Лично аз, ако мога да избегна допълнителни нишки го правя. Виж ако имаш някакви обработки/изчисления които траят много дълго, може и да се наложи допълнителна нишка или някакъв друг трик, за да не ти замръзне интерфейса през това време.


Пон Яну 06, 2014 10:21 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Съб Сеп 22, 2012 2:04 pm
Мнения: 14
Мнение Re: GUI библиотечки за мултиплатформени приложения?
miro_atc написа:
Не разбрах кои са тия различни технологии?
две нишки, едната да си говори по сериен канал и някакво протоколче, другата да опреснява GUI-то - да покаже дали и какво устройство е видяло отсреща, евентуално едно прогрес барче после...

За гну-то бих пуснал таймер, примерно през секунда.


Пон Яну 06, 2014 8:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 12:58 pm
Мнения: 4571
Местоположение: US
Мнение Re: GUI библиотечки за мултиплатформени приложения?
На Qt преди време направих един CAN bus bootloader и CAN bus Monitor. Използвам USB HID за USB <-> CAN конвертора. Monitor има две нишки, главната GUI ( по принцип в Qt GUI може да работи само в главната нишка ) и помощна, приемаща/изпращаща данните по HID. Комуникацията между главната и помощната е чрез signal/slots. Направи ми впечатление, че въпреки малкия обем на данни ( около 64kB в секунда, т.е. колкото позволява един HID ) като пусна CAN да хвърля данни непрекъснато и Monitor–а натоварва на 30% PC машината, без значение Linux или Windows. GUI нишката приема данните и ги разпечатва в един джам, отделно имам за някои CAN променливи отделни QLabel/QEdit полет, т.е. не би трябвало и 10 годишен ПК да се озори. Доколкото четох по документации/форуми излиза, че signal/slots комуникацията между две нишки е причината за натоварването на процесора.

Ще ми интересно Миро да сподели, ако използва същата концепция, дали при него се получава подобно натоварване.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Съб Мар 08, 2014 2:54 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Дек 19, 2005 11:21 am
Мнения: 1007
Мнение Re: GUI библиотечки за мултиплатформени приложения?
¶ написа:
Доколкото четох по документации/форуми излиза, че signal/slots комуникацията между две нишки е причината за натоварването на процесора.


Сигнал/слотовет могат да са свързани по различни начини - direct connection и queued connetion. По подразбиране aко източника и получателя на сигнала са в една и съща нишка се ползва директна връзка. След обработка от MOC (мета обектния компилатор) това е еквиваленто на директно извикване на метода получател на мястото на емитването на сигнала и не би трябвало да има голям overhead сравнено с нормално извикване на метод на някой обект.

Ако излъчвателя и получателя са в различни нишки обаче се ползва queued connection, тоест в момента на извикването на emit се добавя събитие към event loop-a на нишката получател, която след като го обработи ще извика слота към който е свързан сигнала. Това е необходимо за да се изпълни слота в другата нишка. Ако се направи direct connection между сигнал и слот в различни нишки, то при илъчване на този сигнал, слота ще се изпълни пак в нишката на излъчвателя - обикновено не което се иска.

Защо не пуснеш на твоете приложение през един профайлър, да видиш какво го бави. В QT Сreator-a има интеграция с Callgrind, така че поне под Луникс е съвсем лесно да се подкара.


Съб Мар 08, 2014 6:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 12:58 pm
Мнения: 4571
Местоположение: US
Мнение Re: GUI библиотечки за мултиплатформени приложения?
radolin написа:
Сигнал/слотовет могат да са свързани по различни начини - direct connection и queued connetion.

Това е ясно, при мен са Qt::QueuedConnection. Може би защото предавам масиви ? Не съм дълбал да видя как предава масив при signal/slot с Qt::QueuedConnection, дали вмъква едно съобщение в event loop на главната нишка или за всеки елемент вмъква отделно съобщение.

radolin написа:
Защо не пуснеш на твоете приложение през един профайлър, да видиш какво го бави. В QT Сreator-a има интеграция с Callgrind, така че поне под Луникс е съвсем лесно да се подкара.

Като остане време може и това да направя.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пон Мар 10, 2014 8:36 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Дек 19, 2005 11:21 am
Мнения: 1007
Мнение Re: GUI библиотечки за мултиплатформени приложения?
¶ написа:
radolin написа:
Сигнал/слотовет могат да са свързани по различни начини - direct connection и queued connetion.

Това е ясно, при мен са Qt::QueuedConnection. Може би защото предавам масиви ? Не съм дълбал да видя как предава масив при signal/slot с Qt::QueuedConnection, дали вмъква едно съобщение в event loop на главната нишка или за всеки елемент вмъква отделно съобщение.
[quote]

Типа на предаваните данни няма значение за вида на връзката. QueuedConnection e, защото го предеваш към слот в друга нишка. Ако беше директна връзка, слота щеше да се изпълни в нишката от където се излъчва сигнала.

Какъв точно тип е 'масив'-а? Със сигурност не се предава елемент по елемент. Ако го предаваш по стойност, вместо това го предавай като указател/референс да се спести едно копиране. Ако ползваш някой от вградениет Qt типове като QArray/QList дори и да го предаваш по стойност не се копират самите дании. Тези вградени контейнерни класове ползват "implicit sharing and copy-on-write".


Пон Мар 10, 2014 8:59 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Съб Ное 12, 2011 8:21 pm
Мнения: 62
Мнение Re: GUI библиотечки за мултиплатформени приложения?
¶ написа:
и ги разпечатва в един джам


пробвай да не ги печаташ (предполагам, ползваш QPlainTextEdit, а не QTextEdit, няма голямо значение май в твоя случай); тъпо е, но може и да има съществена разлика, поне аз съм настъпвал такава мотика


Вто Мар 11, 2014 8:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 12:58 pm
Мнения: 4571
Местоположение: US
Мнение Re: GUI библиотечки за мултиплатформени приложения?
Типа на масива е QByteArray с размер 64 байта и го предавам по стойност. За една секунда са максимум 500 копирания при пълно натоварване на CAN мрежата на скорост 250kbps, или общо 32kB, плюс някакви допълнителни байтове, защото QByteArray е клас и не е чист масив. Но това няма как да натовари 4 ядрен XEON, или 4-ри ядрен i3/i5.

Джама в който се печата е QListWidget. Не съм пробвал в QPlainTextEdit/QTextEdit, но ще го изпробвам. Всъщност сега нищо не мога да пробвам, че имам други задачки-закачки.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Мар 11, 2014 10:02 pm
Профил WWW
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Фев 20, 2013 4:18 pm
Мнения: 158
Местоположение: UK
Мнение Re: GUI библиотечки за мултиплатформени приложения?
Като става въпрос за Qt, има ли някой който да му се занимава да ми обясни как да направя статична апликация с Qt + OpenCV? Инсталирал съм статичен Qt (работи), но с OpenCV static build нещо не мога да се справя. И с двете ми е първа среща; работят си, но искам да направя standalone апликация.


Пон Ное 24, 2014 8:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 12:58 pm
Мнения: 4571
Местоположение: US
Мнение Re: GUI библиотечки за мултиплатформени приложения?
C++ Qt Programming by VoidRealms
Как да работим с Qt, серия от 116 видео урока. Намерих ги преди около година, свалил съм си ги като
mp4 файловете, много са полезни за бърза справка. Така и не мога да запомня кое как се прави в QtDesigner,
та с тези уроци си припомням бързо нещата.

А, станали са 129 урока :D , ще трябва да сваля липсващите.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Яну 20, 2015 7:30 am
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 26 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни