QMap + QThread |
Здравствуйте, гость ( Вход | Регистрация )
QMap + QThread |
AXELman4ever |
27.10.2011, 12:21
Сообщение
#1
|
Студент Группа: Участник Сообщений: 31 Регистрация: 22.9.2011 Пользователь №: 2902 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день!
Уважаемые, не пинайте сильно если подобные темы уже возникали (в поиске не натыкался). В первую очередь признаюсь - каких либо глубоких познаний в потоках не имею, но работаю над этим. Посему хочу просить помощь в просвещении того как ораганизовать подобную связку. 1-ое: Имеется 2 дочерних потока ("вытекающие" из мейн потока). Цель такова: 1 поток должен заносить значения в карту (QMap), 2 поток должен эти значения cчитывать. То есть, осуществляется общение (если концепция этого слова мне ясна) между потоками. Подскажите пожалуйста, есть ли QMap потокобезопасным, и как привязать эти потоки к общему(глобальному) экземпляру QMap чтобы достигнуть поставленной цели. 2-ое: Так же буду благодарен, если кто-нибудь предоставит мне не большой пример, по работе с одной общей переменой (к примеру с int'ом) из двух потоков - 1 поток пишет значение, 2-ой - читает его. Я так понимаю - здесь необходимо задействовать мютекс. Всё что я знаю, так это то, что переменная не может иметь спецификатор static, по скольку это не безопасно (но я не понимаю почему). UDP: Как вести общение между потоками посредством сигнал/слот я понимаю(по крайней мере мне так кажется ), за исключением того что я не знаю, можно ли при этом миновать главный поток, в котором ведется привязка сигнала к слоту разных потоков. Какие еще существуют средства обмена данными между потоками в QT, если не брать во внимание наличие механизма сигнал/слот? Объясните пожалуйста кому не сложно. Читал кучу инфы, перелопатил много гугла, но везде только примитивные малоинформативные примеры и практически никакого объяснения. Заранее благодарен |
|
|
ssoft |
27.10.2011, 17:40
Сообщение
#2
|
Участник Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: 3 |
Например, что-то такое
или
|
|
|
AXELman4ever |
27.10.2011, 18:55
Сообщение
#3
|
Студент Группа: Участник Сообщений: 31 Регистрация: 22.9.2011 Пользователь №: 2902 Спасибо сказали: 0 раз(а) Репутация: 0 |
Например, что-то такое ..... О, ну это уже по-интереснее А почему я не могу залочить мютекс непосредственно перед вставкой элемента, при этом не создавая обертку? Ну к примеру :
Разве не тоже самое? Просто за безопасностью придется следить самостоятельно. UDP: Возьму на Вашем примере, создам экземпляр класса-обертки. Теперь стоит вопрос в том как использовать этот экземпляр между потоками? Внедрить его как поле в класс-синглтон и оперировать им из потоков через указатели? |
|
|
ssoft |
28.10.2011, 8:13
Сообщение
#4
|
Участник Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: 3 |
А почему я не могу залочить мютекс непосредственно перед вставкой элемента, при этом не создавая обертку? Разве не тоже самое? Просто за безопасностью придется следить самостоятельно. Почти тоже самое, просто обертка автоматически разлочит мьютекс при любой причине выхода из пространства её видимости, даже при исключениях. А здесь нужно самому помнить об этом, а исключение оставит мьютекс заблокированным. UDP: Возьму на Вашем примере, создам экземпляр класса-обертки. Теперь стоит вопрос в том как использовать этот экземпляр между потоками? Внедрить его как поле в класс-синглтон и оперировать им из потоков через указатели? Можно и синглтоном, а лучще через умный указатель QSharedPointer. PS. Жмем кнопку спасибо |
|
|
Текстовая версия | Сейчас: 22.11.2024, 19:39 |