![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
iManiac |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.9.2007 Репутация: нет Всего: нет |
Итак, есть класс очереди. В эту очередь добавляются события с разных потоков, в том числе и из того потока, в котором эта очередь потом обрабатывается.
Проблема: Во время обработки самой очереди, при попытке добавления нвого события, поток его добавляющий вместо ожидания, пока очередь пройдет обработку, попросту виснет и блокирует доступ к классу. Код:
Это сообщение отредактировал(а) iManiac - 9.6.2009, 10:32 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Хм, у вас 'несколько' все наоборот - sync.wait должен стоять в ProcessQueue, а sync.notify_one в AddEvent
И сигнализировать он должен о том, что в очередь добавился элемент Добавление и удаление элементов (но только САМО добавление и удаление, а не вся последующая обработка) должны быть защищены мьютексом Это сообщение отредактировал(а) xvr - 9.6.2009, 12:36 |
|||
|
||||
iManiac |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.9.2007 Репутация: нет Всего: нет |
Да нет, просто специфика задачи такая, ProcessQueue выполняется при рендере каждого кадра и ждать добавления события означает ожидания самого рендера, что неприемлимо... Потому так, а с безопасностью я разобрался, дело в том что внутри AddEvent был еще один вложенный AddEvent, и получалось что один поток ожидает самого себя...
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Тогда вам condition вообще не нужен.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |