LINUX.ORG.RU

потоко-безопасность данных в сигналах-слотах

 , , queued,


0

1

Qt конечно предоставляет всякие вкусные фишки и удобняшки, но бывают неприятные сюрпризы внутри ввиде нечеткого понимания поведения и внутреннего строения.

Вопрос такой: что если я вызываю слот класса наследованного от QThread через QMetaObject::invokeMethod, он вызовется в основном потоке или в как раз во втором потоке (что мне как раз надо)?

Что происходит с данными, которые передаются через слот при Qt::QueuedConnection? Например, я отправляю QByteArray или QString при помощи emit во второй поток - и тут же начну их модифицировать в основном? Когда я делаю emit - ведь делается копия данных, но легкая (copy on write типа)? Если я буду модифицировать любую из копий - выполнится реальное копирование. Эта операция thread-safe???

Хочу нащупать где заканчиваются пределы продуманности Qt и начинается моя головная боль... от чего защитили глупых разработчиков типа меня а от чего нет :)

★★★★★

Последнее исправление: I-Love-Microsoft (всего исправлений: 2)

Вопрос такой: что если я вызываю слот класса наследованного от QThread через QMetaObject::invokeMethod, он вызовется в основном потоке или в как раз во втором потоке (что мне как раз надо)?

А у этой функции просто так есть аргумент типа Qt::ConnectionType?

Если я буду модифицировать любую из копий - выполнится реальное копирование. Эта операция thread-safe???

Да. Это одна из вещей, которой тролли хвастались - потокобезопасный CoW контейнеры.

Begemoth ★★★★★
()
Ответ на: комментарий от quiet_readonly

Вроде бы все контейнеры thread-safe

Только часть, ответственная за CoW.

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