| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > boost::signal многопоточный ли? |
| Автор: xTr1m 15.2.2012, 15:34 | ||
Доброго времени суток. Есть у меня задача (обрисую упрощенно): есть GUI, состоящий из списка и дерева. Каждый элемент дерева (и списка тоже) имею свою m_pData (допустим это некий автомобиль), причем автомобиль представлен как в дереве, так и в списке. Есть некий диалог который меняет атрибуты автомобиля. Соответственно мне нужно (не закрывая диалога) обновить данные по этому автомобилю как в дереве, так и в списке. Я подумал сделать так:
То есть и дерево и список подписаны на это событие. По сути и дерево и список пройдется по своим элементам и вернет мне те элементы, которые "ссылаются" на мое авто, а потом я их обнвовлю. Меня смущает вот что: если сигнал многопоточный, то получится, что в itemsToRefreshVec будет попытка записи из разных потоков. А может такую задачу вообще по-другому решают? P.S. а вообще реальная задача отличается тем, что сейчас есть просто список и проблем с многопоточностью нет, но я точно знаю, что скоро их будет много =)) |
| Автор: boostcoder 15.2.2012, 15:46 |
| http://www.boost.org/doc/libs/1_48_0/libs/signals/index.html - не многопоточный. http://www.boost.org/doc/libs/1_48_0/libs/signals2/index.html - многопоточный. но в вашем коде я не вижу никакого намека на многопоточность... не понятно откуда возник вопрос. |
| Автор: xTr1m 15.2.2012, 15:46 |
| Сейчас сделал тестовый пример. Связал с сигналом 10 функций добавления элементов в один вектор. Вызвал сигнал. Вроде отработало последовательно, то есть в порядке как делал connect. То есть все-таки он не многопоточный? Добавлено через 6 минут и 27 секунд Ну как нет намека =). По моим размышлениям, если я сделаю connect с 10 списками и вызову сигнал, то он может запустить (условно) 10 потоков на функции, которые с ним связаны. Отсюда возможное обращение к вектору из разных функций. Добавлено через 7 минут и 28 секунд Ну судя по всему в моем случае бояться нечего. Однако интересует теперь другое: я правильно подошел к решению задачи? |
| Автор: boostcoder 15.2.2012, 16:11 |
boost.signals не создает потоков. он замыкает каждый callable слот на вызывающий поток. а в чем задача? |
| Автор: xTr1m 15.2.2012, 16:15 |
| |
| Автор: mes 15.2.2012, 16:31 |
| xTr1m, вы путаете многопоточность и ассинхронность.. сигнал просто передает вызов одному или нескольким подключенным слотам(колбякам ) |
| Автор: xTr1m 15.2.2012, 16:37 |
Добавлено @ 16:43 Ну так эти слоты выполняются последовательно или параллельно? |
| Автор: boostcoder 15.2.2012, 16:47 |
| последовательно. с чего бы им выполняться параллельно? |
| Автор: xTr1m 15.2.2012, 16:57 |
| Штука в том, что я как раз пытаюсь от Document/View А тут просто - подписался - пришло. |