LINUX.ORG.RU
ФорумTalks

C++, многопоточный вызов сигнала в Qt.


0

1

Безопасно ли одновременно из нескольких потоков вызывать функцию-сигнал Q_OBJECT-объекта?

У меня есть несколько потоков, которые параллельно считают части внешнего вида объекта X. Когда каждая часть готова, поток дёргает метод X::finish() объекта-виджета. Так как рисовать что-то в Qt можно только из основного потока Qt (из X::paintEvent()), то основно поток надо как-то пнуть. Метод X::finish() вызывает метод-сигнал X::signalDraw() того же объета, который уже соединён со слотом, который вызывает X::update или другим способом провоцирует вызов X::paintEvent(), в котором уже отрисовываются обновления.

Программа работает в несколько потоков как часы, но valgrind --tool=drd ругается race condition в районе (он точно не показывает) гуляния внутри Qt-шных служебных вызовов - всякие там qt_static_metacall, QMetaObject::activate.

Чё он ругается - не пойму пока. Вот сформулировался вопрос из первого абзаца.

★☆

Последнее исправление: kiverattes (всего исправлений: 1)

Не вызывай методы, а посылай сообщения через очередь.

P.s.: в development

no-dashi ★★★★★
()

Советую почитать Шлее Qt 4.5 и подтянуть знания. Там всё разделено, понятно разьяснено. Книга хороша как учебник и как справочниик. Сам сейчас читаю. Про многопоточность тоже есть выделенная глава.

Human-source
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.