Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

GUI библиотечки за мултиплатформени приложения?
http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=12573
Страница 2 от 2

Автор:  miro_atc [ Пон Яну 06, 2014 8:51 am ]
Заглавие:  Re: GUI библиотечки за мултиплатформени приложения?

Не разбрах кои са тия различни технологии?

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

Автор:  radolin [ Пон Яну 06, 2014 10:21 am ]
Заглавие:  Re: GUI библиотечки за мултиплатформени приложения?

miro_atc написа:
Нищо сложно, даже не съм сигурен дали ще ми трябва втора нишка, още не съм стигнал до слотовете и сигналите на Qt...


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

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

Автор:  1204 [ Пон Яну 06, 2014 8:24 pm ]
Заглавие:  Re: GUI библиотечки за мултиплатформени приложения?

miro_atc написа:
Не разбрах кои са тия различни технологии?
две нишки, едната да си говори по сериен канал и някакво протоколче, другата да опреснява GUI-то - да покаже дали и какво устройство е видяло отсреща, евентуално едно прогрес барче после...

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

Автор:  [ Съб Мар 08, 2014 2:54 pm ]
Заглавие:  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 комуникацията между две нишки е причината за натоварването на процесора.

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

Автор:  radolin [ Съб Мар 08, 2014 6:13 pm ]
Заглавие:  Re: GUI библиотечки за мултиплатформени приложения?

¶ написа:
Доколкото четох по документации/форуми излиза, че signal/slots комуникацията между две нишки е причината за натоварването на процесора.


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

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

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

Автор:  [ Пон Мар 10, 2014 8:36 am ]
Заглавие:  Re: GUI библиотечки за мултиплатформени приложения?

radolin написа:
Сигнал/слотовет могат да са свързани по различни начини - direct connection и queued connetion.

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

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

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

Автор:  radolin [ Пон Мар 10, 2014 8:59 am ]
Заглавие:  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".

Автор:  loser [ Вто Мар 11, 2014 8:38 pm ]
Заглавие:  Re: GUI библиотечки за мултиплатформени приложения?

¶ написа:
и ги разпечатва в един джам


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

Автор:  [ Вто Мар 11, 2014 10:02 pm ]
Заглавие:  Re: GUI библиотечки за мултиплатформени приложения?

Типа на масива е QByteArray с размер 64 байта и го предавам по стойност. За една секунда са максимум 500 копирания при пълно натоварване на CAN мрежата на скорост 250kbps, или общо 32kB, плюс някакви допълнителни байтове, защото QByteArray е клас и не е чист масив. Но това няма как да натовари 4 ядрен XEON, или 4-ри ядрен i3/i5.

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

Автор:  stewie [ Пон Ное 24, 2014 8:40 pm ]
Заглавие:  Re: GUI библиотечки за мултиплатформени приложения?

Като става въпрос за Qt, има ли някой който да му се занимава да ми обясни как да направя статична апликация с Qt + OpenCV? Инсталирал съм статичен Qt (работи), но с OpenCV static build нещо не мога да се справя. И с двете ми е първа среща; работят си, но искам да направя standalone апликация.

Автор:  [ Вто Яну 20, 2015 7:30 am ]
Заглавие:  Re: GUI библиотечки за мултиплатформени приложения?

C++ Qt Programming by VoidRealms
Как да работим с Qt, серия от 116 видео урока. Намерих ги преди около година, свалил съм си ги като
mp4 файловете, много са полезни за бърза справка. Така и не мога да запомня кое как се прави в QtDesigner,
та с тези уроци си припомням бързо нещата.

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

Страница 2 от 2 Часовете са според зоната UTC + 1 час [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/