Название: EventLoop Отправлено: BuRn от Март 16, 2015, 23:20 Есть класс, у которого в конструкторе навешан обработчик на чтение некоторых данных.
Есть у класса деструктор, который вызывается в рандомное время(зависит от пользователя). Проблема в следующем, сам класс с этим обработчиком находится в гуи потоке, когда срабатывает сигнал, обработчик на сколько я понимаю отрабатывает уже не в гуишном потоке и того получаем 2 потока. Так вот, поставил локер, пока поток от слота не отработает, ожидать в деструкторе завершения работы слота. Но в слоте присутствует QEventLoop для паузы, и вот по непонятным мне причинам, когда я делаю QMutexLocker lockers(&_mtx);, поток с обработчиком(слотом) просто замирает, а замирает на паузе которая сделана через QEventLoop. Я так предполагаю я залочил поток со слотом, подскажите как быть. Просьба сильно не пинать, только начинаю разбираться с многопоточностью. Пауза выглядит так: Код: void sleep(int ms) Название: Re: EventLoop Отправлено: Old от Март 17, 2015, 02:09 У каждого потока есть своя очередь событий, одна.
Цикл обработки событий работает в том потоке, в котором запущен и обрабатывает очередь событий того потока, в котором запущен. Т.е. если вы сами не запускаете eventlop, в другом потоке, значит он работает в gui потоке и поэтому, этот поток замирает в слипе. Кстати, sleep течет, никто не удаляет объекты класса QEventLoop. Проще их создовать на стеке. |