Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost::signal многопоточный ли? 
:(
    Опции темы
xTr1m
Дата 15.2.2012, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: 1
Всего: 1



Доброго времени суток. Есть у меня задача (обрисую упрощенно): есть GUI, состоящий из списка и дерева. Каждый элемент дерева (и списка тоже) имею свою m_pData (допустим это некий автомобиль), причем автомобиль представлен как в дереве, так и в списке. Есть некий диалог который меняет атрибуты автомобиля. Соответственно мне нужно (не закрывая диалога) обновить данные по этому автомобилю как в дереве, так и в списке. Я подумал сделать так:
Код

std::vector<CGuiItem*> itemsToRefreshVec;
CaplALP_Root::GetSingleton().m_SIG_GetItems(arr[i], itemsToRefreshVec);

for(unsigned int i=0; i<itemsToRefreshVec.size(); ++i)
{
    itemsToRefreshVec[i]->Refresh();
}

То есть и дерево и список подписаны на это событие. По сути и дерево и список пройдется по своим элементам и вернет мне те элементы, которые "ссылаются" на мое авто, а потом я их обнвовлю. Меня смущает вот что: если сигнал многопоточный,  то получится, что в itemsToRefreshVec будет попытка записи из разных потоков. А может такую задачу вообще по-другому решают?

P.S. а вообще реальная задача отличается тем, что сейчас есть просто список и проблем с многопоточностью нет, но я точно знаю, что скоро их будет много =))
PM MAIL WWW ICQ   Вверх
boostcoder
Дата 15.2.2012, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



boost.signals - не многопоточный.
boost.signals2 - многопоточный.

но в вашем коде я не вижу никакого намека на многопоточность... не понятно откуда возник вопрос.
PM WWW   Вверх
xTr1m
Дата 15.2.2012, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: 1
Всего: 1



Сейчас сделал тестовый пример. Связал с сигналом 10 функций добавления элементов в один вектор. Вызвал сигнал. Вроде отработало последовательно, то есть в порядке как делал connect. То есть все-таки он не многопоточный?

Добавлено через 6 минут и 27 секунд
Ну как нет намека =). По моим размышлениям, если я сделаю connect с 10 списками и вызову сигнал, то он может запустить (условно) 10 потоков на функции, которые с ним связаны. Отсюда возможное обращение к вектору из разных функций.

Добавлено через 7 минут и 28 секунд
Ну судя по всему в моем случае бояться нечего. Однако интересует теперь другое: я правильно подошел к решению задачи?
PM MAIL WWW ICQ   Вверх
boostcoder
Дата 15.2.2012, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(xTr1m @  15.2.2012,  15:46 Найти цитируемый пост)
10 потоков на функции

boost.signals не создает потоков. он замыкает каждый callable слот на вызывающий поток.

Цитата(xTr1m @  15.2.2012,  15:46 Найти цитируемый пост)
я правильно подошел к решению задачи?

а в чем задача? smile
PM WWW   Вверх
xTr1m
Дата 15.2.2012, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: 1
Всего: 1



 smile  задача обновить некие данные, представленные в разных местах из одного красивым, простым и лекгорасширяемым споспобом
PM MAIL WWW ICQ   Вверх
mes
Дата 15.2.2012, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



xTr1m,  вы путаете многопоточность и ассинхронность..  smile
сигнал просто передает вызов одному или нескольким подключенным слотам(колбякам ) smile


 



--------------------
PM MAIL WWW   Вверх
xTr1m
Дата 15.2.2012, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: 1
Всего: 1



smile

Добавлено @ 16:43
Ну так эти слоты выполняются последовательно или параллельно?

Это сообщение отредактировал(а) xTr1m - 15.2.2012, 16:43
PM MAIL WWW ICQ   Вверх
boostcoder
Дата 15.2.2012, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



последовательно. с чего бы им выполняться параллельно? smile

PM WWW   Вверх
borisbn
Дата 15.2.2012, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(xTr1m @  15.2.2012,  16:15 Найти цитируемый пост)
задача обновить некие данные, представленные в разных местах из одного красивым, простым и лекгорасширяемым споспобом

уже всё давно продумано и написано. называется это MVC - Model/View/Controller.
В библиотеке, которую ты используешь, (я правильно понимаю, что это - MFC?) это называется Document/View


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
xTr1m
Дата 15.2.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: 1
Всего: 1



Штука в том, что я как раз пытаюсь от Document/View  smile  ибо тут такой огород из этих апдейтов, что мама не горюй. Я вызову один update, а он вызовется в 15-дцати местах.
А тут просто - подписался - пришло.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.