crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> 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, если не брать во внимание наличие механизма сигнал/слот?



Объясните пожалуйста кому не сложно. Читал кучу инфы, перелопатил много гугла, но везде только примитивные малоинформативные примеры и практически никакого объяснения. Заранее благодарен :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
AXELman4ever
  опции профиля:
сообщение 1.11.2011, 18:23
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 22.9.2011
Пользователь №: 2902

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
Опасность в одновременном не синхронизированном доступе к данным из разных потоков, и как следствие возможном нарушения их целостности и крешу программы.


Спасибо, я так и предполагал. А синхронизировать доступ можно через выше перечисленные Вами приблуды. Просто требовался подтверждение этому из Ваших "уст". ^_^

1:
Цитата
И выполняться он будет, там же, в дочернем потоке.
Где методы вызываются, там они и выполняются.

2:
Цитата
но перехватывать вызов методов и перенаправлять их в очередь сообщений Qt не умеет.


Но ведь (1) справедливо только для прямого вызова (используя Qt::DirectConnection), а если вести речь о вызове через сигнал/слот используя Qt::QueuedConnection?

Ведь документация гласит о Qt::QueuedConnection что при таком подключении The slot is executed in the receiver's thread. Как я понимаю это имеет прямое отношение к пункту 2.

Об очереди у меня сформировалось такое понятие - что каждый (не прямой) вызов метода из другого потока становится в очередь на выполнение в главном потоке. И когда главный поток берет на себя управление, он пересматривает очередь и выполняет в своем потоке все те задачи на выполнение, которые набежали от дочерних потоков.

Если мое понимание не есть верным, очень прошу Вас, докажите мне что это так. Спасибо.

Сообщение отредактировал AXELman4ever - 1.11.2011, 18:24
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AXELman4ever   QMap + QThread   27.10.2011, 12:21
- - wiz29   1. QMap не потокобезопасен. Делай класс обертку дл...   27.10.2011, 14:28
|- - AXELman4ever   Цитата(wiz29 @ 27.10.2011, 14:28) 1. QMap...   27.10.2011, 15:20
|- - AXELman4ever   Цитата(AXELman4ever @ 27.10.2011, 15:20) ...   27.10.2011, 16:04
- - ssoft   Например, что-то такое template< typename _Ke...   27.10.2011, 17:40
|- - AXELman4ever   Цитата(ssoft @ 27.10.2011, 17:40) Наприме...   27.10.2011, 18:55
|- - ssoft   Цитата(AXELman4ever @ 27.10.2011, 19:55) ...   28.10.2011, 8:13
|- - AXELman4ever   Цитата(ssoft @ 28.10.2011, 8:13) PS. Жмем...   28.10.2011, 9:42
|- - AXELman4ever   А у меня еще вопрос: Если не залочить insert() ме...   30.10.2011, 6:31
|- - ssoft   Цитата(AXELman4ever @ 30.10.2011, 7:31) А...   31.10.2011, 7:46
|- - AXELman4ever   Цитата(ssoft @ 31.10.2011, 7:46) Если обр...   31.10.2011, 13:47
- - ssoft   Цитата(AXELman4ever @ 31.10.2011, 14:47) ...   31.10.2011, 13:53
|- - AXELman4ever   1: Уточню: QMap принадлежит только главному пото...   31.10.2011, 19:11
- - ssoft   В такой реализации скрыта серьезная ошибка. Правда...   1.11.2011, 8:46
- - AXELman4ever   Премного благодарен за толковое разъяснение. 1. ...   1.11.2011, 13:33
- - ssoft   Цитата(AXELman4ever @ 1.11.2011, 14:33) ...   1.11.2011, 16:45
- - AXELman4ever   ЦитатаОпасность в одновременном не синхронизирован...   1.11.2011, 18:23
- - ssoft   Начиналось все с того, что Цитата(AXELman4ever ...   2.11.2011, 17:17
- - AXELman4ever   Замечательно, вижу свет в конце тоннеля За что, ...   2.11.2011, 23:13
- - ssoft   Цитата(AXELman4ever @ 3.11.2011, 0:13) То...   3.11.2011, 7:45
- - AXELman4ever   Цитата(ssoft @ 3.11.2011, 7:45) Например,...   3.11.2011, 11:28


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 2:13