BG Development


  Reply to this topicStart new topicStart Poll

> Qt Signal/Slots to Boost.Singals2, Въпрос относно нишки
THE STORM
Публикувано на: 11-03-2018, 21:29
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 817
Регистриран на: 19.08.05



Здравейте,

От много години насам разчитам на Signals/Slots имплементацията в Qt за да пиша 'decoupled' код, който е лесен за поддръжка. От време на време обаче изкача някой и друг проект в който не мога да използвам Qt поради различни причини. Горе/долу всичко, което ми трябва от Qt за писане на код без GUI го има в STL и Boost под една или друга форма. Има само едно нещо на което не можах да намеря конкретен отговор в нета и не можах да си отговоря сам(може би заради малкото ми опит с Boost).

Има ли вариант извикан сигнал от една нишка да извика съответния слот в друга нишка?
Това е нещото, на което не намирам алтернатива спрямо Qt. Там това много ме улеснява понеже няма нужда да пиша излишен код за синхронизация и известяване на другата нишка, че има промени. При boost извикванията винаги са директни, т.е. която нишка вика сигнала, същата вика и слота.
Qt я прави магията с прехвърлянето в нишките само при условие, че в target нишката има event loop, което за мен си е Ок, така иначе пиша асинхронно.

Та някой знае ли някакъв елегантен вариант това да стане с Boost.Signals2 и Boost.Asio(техния event loop)?
PMEmail Poster
Top
bvbfan
Публикувано на: 11-03-2018, 21:55
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2786
Регистриран на: 08.12.13



http://www.boost.org/doc/libs/1_66_0/doc/h...io_service.html
Connect-ваш сигналите, стартираш в друга нишка service-а (run) и в слотовете post-ваш


--------------------
QUOTE (Bender @ 23-04-2015, 19:11)
Xamarin: ЛАПАЙ!
Ти: Добре...
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 11-03-2018, 22:00
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1093
Регистриран на: 21.02.18



какви са тези сигнали и слотове ?


--------------------
Напред! Живота е сраженье!
Напред! И прав всегда ходи!
Напред, макар към поражение!
Ако ще паднеш, прав падни!
---
Axis of faith; Raw, and untamed in spirit
To do and undo...
We chew this world; And Spit it out
PMEmail PosterUsers Website
Top
Реконструктор
Публикувано на: 11-03-2018, 22:04
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 395
Регистриран на: 18.12.06



Нещо май ти е боза в главата. Веднага ли трябва да става сигнализирането, или може след известно време? Ако трябва да е веднага това не е баш сигнализиране, ами или директен кол, или някво блокиращо фасилити (което разблокираш).
Ако ти е ОК да не е веднага, всяко message queue / event loop фасилити ще свърши работа, имплементации колкото искаш. Даже за повечето модерни ОС си има вътрешна имплементация на това, така че ако не ти трябва платформена независимост, няма смисъл да се мъчиш с разни фреймуорци.
PMEmail Poster
Top
bvbfan
Публикувано на: 11-03-2018, 22:12
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2786
Регистриран на: 08.12.13



Не му е боза иска от едната нишка да сигнализира другата, без да направи data race. Това Qt го прави "автоматично", като извиква слота в нишката на извикващия като го поставя в неговият event loop (ако няма е нормално да не случи нищо)


--------------------
QUOTE (Bender @ 23-04-2015, 19:11)
Xamarin: ЛАПАЙ!
Ти: Добре...
PMEmail Poster
Top
THE STORM
Публикувано на: 11-03-2018, 23:42
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 817
Регистриран на: 19.08.05



@Gamma Goblin http://doc.qt.io/qt-5/signalsandslots.html т.е. готин observable pattern.

@Реконструктор Не ми трябват неща от сорта на PostMessage() дето да пускам event-и с id-та и някъде да чакам за тях и да прехвърлям... Много хамалогия. Искам нещо като при Qt.

@bvbfan Т.е. трябва ръчно в слотовете да правя
CODE

boost::asio::post(io_context, myFunction);


Съответно самия слот трябва да знае за наличието на io_context-а на другата нишка. Няма ли някакъв по-автоматичен начин това да стане подобно на схемите в Qt?
PMEmail Poster
Top
bvbfan
Публикувано на: 12-03-2018, 07:27
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2786
Регистриран на: 08.12.13



Да, т.е. в класовете трябва да си имаш мембърот тип io_service


--------------------
QUOTE (Bender @ 23-04-2015, 19:11)
Xamarin: ЛАПАЙ!
Ти: Добре...
PMEmail Poster
Top
THE STORM
Публикувано на: 12-03-2018, 10:55
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 817
Регистриран на: 19.08.05



Тази схема тотално разказва играта на decoupling-a плюс, че е твърде verbose... Няма ли някакво по-елегантно решение?
PMEmail Poster
Top
bvbfan
Публикувано на: 12-03-2018, 13:10
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2786
Регистриран на: 08.12.13



Аз не се сещам за друго това или condition variable.


--------------------
QUOTE (Bender @ 23-04-2015, 19:11)
Xamarin: ЛАПАЙ!
Ти: Добре...
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0