Виж темите без отговор | Виж активните теми
Дата и час: Чет Апр 25, 2024 7:23 pm
GUI библиотечки за мултиплатформени приложения?
Автор |
Съобщение |
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10376 Местоположение: Добрич
|
Re: GUI библиотечки за мултиплатформени приложения?
Не разбрах кои са тия различни технологии?
В момента нямам чак толкова технологични неща. Няколко стари тулчета и то там проблема е че всяко е преправяно, преправяно с годините и е малко мазало, но все гледам да мина по тънката лайсна без да се пренаписва. Сега при прехода към Qt ще се наложи да се пренапише. Нядявам се няма да е сложно, в смисъл примерно едното тулче му трябват две нишки, едната да си говори по сериен канал и някакво протоколче, другата да опреснява GUI-то - да покаже дали и какво устройство е видяло отсреща, евентуално едно прогрес барче после... Нищо сложно, даже не съм сигурен дали ще ми трябва втора нишка, още не съм стигнал до слотовете и сигналите на Qt...
|
Пон Яну 06, 2014 8:51 am |
|
|
radolin
Ранг: Форумен бог
Регистриран на: Пон Дек 19, 2005 11:21 am Мнения: 1029
|
Re: GUI библиотечки за мултиплатформени приложения?
Най-вероятно няма да ти трябва втора нишка. В Qt общо взето идеята е всичко да става асинхронно. Пускаш някаква мрежова заявка и се връщаш в главния event loop. После като пристигнат някакви данни, получаваш сигнал и ги обработваш и пак се връщаш. Поне мрежовите функции имат и блокиращи и неблокиращи версии, така че може да си избереш кои да ползваш. Лично аз, ако мога да избегна допълнителни нишки го правя. Виж ако имаш някакви обработки/изчисления които траят много дълго, може и да се наложи допълнителна нишка или някакъв друг трик, за да не ти замръзне интерфейса през това време.
|
Пон Яну 06, 2014 10:21 am |
|
|
1204
Ранг: Минаващ
Регистриран на: Съб Сеп 22, 2012 2:04 pm Мнения: 14
|
Re: GUI библиотечки за мултиплатформени приложения?
За гну-то бих пуснал таймер, примерно през секунда.
|
Пон Яну 06, 2014 8:24 pm |
|
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 12:58 pm Мнения: 4580 Местоположение: 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 |
|
|
radolin
Ранг: Форумен бог
Регистриран на: Пон Дек 19, 2005 11:21 am Мнения: 1029
|
Re: GUI библиотечки за мултиплатформени приложения?
Сигнал/слотовет могат да са свързани по различни начини - 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 Мнения: 4580 Местоположение: US
|
Re: GUI библиотечки за мултиплатформени приложения?
Това е ясно, при мен са Qt::QueuedConnection. Може би защото предавам масиви ? Не съм дълбал да видя как предава масив при signal/slot с Qt::QueuedConnection, дали вмъква едно съобщение в event loop на главната нишка или за всеки елемент вмъква отделно съобщение. Като остане време може и това да направя.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
Пон Мар 10, 2014 8:36 am |
|
|
radolin
Ранг: Форумен бог
Регистриран на: Пон Дек 19, 2005 11:21 am Мнения: 1029
|
Re: GUI библиотечки за мултиплатформени приложения?
Това е ясно, при мен са 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 |
|
|
loser
Ранг: Минаващ
Регистриран на: Съб Ное 12, 2011 8:21 pm Мнения: 62
|
Re: GUI библиотечки за мултиплатформени приложения?
пробвай да не ги печаташ (предполагам, ползваш QPlainTextEdit, а не QTextEdit, няма голямо значение май в твоя случай); тъпо е, но може и да има съществена разлика, поне аз съм настъпвал такава мотика
|
Вто Мар 11, 2014 8:38 pm |
|
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 12:58 pm Мнения: 4580 Местоположение: US
|
Re: GUI библиотечки за мултиплатформени приложения?
Типа на масива е QByteArray с размер 64 байта и го предавам по стойност. За една секунда са максимум 500 копирания при пълно натоварване на CAN мрежата на скорост 250kbps, или общо 32kB, плюс някакви допълнителни байтове, защото QByteArray е клас и не е чист масив. Но това няма как да натовари 4 ядрен XEON, или 4-ри ядрен i3/i5.
Джама в който се печата е QListWidget. Не съм пробвал в QPlainTextEdit/QTextEdit, но ще го изпробвам. Всъщност сега нищо не мога да пробвам, че имам други задачки-закачки.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
Вто Мар 11, 2014 10:02 pm |
|
|
stewie
Ранг: Ориентиран
Регистриран на: Сря Фев 20, 2013 4:18 pm Мнения: 296 Местоположение: България
|
Re: GUI библиотечки за мултиплатформени приложения?
Като става въпрос за Qt, има ли някой който да му се занимава да ми обясни как да направя статична апликация с Qt + OpenCV? Инсталирал съм статичен Qt (работи), но с OpenCV static build нещо не мога да се справя. И с двете ми е първа среща; работят си, но искам да направя standalone апликация.
|
Пон Ное 24, 2014 8:40 pm |
|
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 12:58 pm Мнения: 4580 Местоположение: US
|
Re: GUI библиотечки за мултиплатформени приложения?
C++ Qt Programming by VoidRealmsКак да работим с Qt, серия от 116 видео урока. Намерих ги преди около година, свалил съм си ги като mp4 файловете, много са полезни за бърза справка. Така и не мога да запомня кое как се прави в QtDesigner, та с тези уроци си припомням бързо нещата. А, станали са 129 урока , ще трябва да сваля липсващите.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
Вто Яну 20, 2015 7:30 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|