LINUX.ORG.RU

Qt сигналы

 , ,


0

1

Подскажите как работает вот этот сигнал:

binaryMessageRecived(const QByteArray &)

Что после выхода из функции-передатчика объект не разрушается? А если другой поток, и его остановить и уничтожить???

Разрушается, но при использовании direct connection выход из вызывающей функции происходит позже, а при queud объект копируется внутрь специального event'а

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

Это хорошо, а то я думал уже магия какая-то :)

queud объект копируется внутрь специального event'а

Тогда уже лучше указатели использовать

LinuxDebian ★★★★
() автор топика
Ответ на: комментарий от annulen

Смотря какая задача, можно передать, а у себя выделить память по новой.

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

Специально для вас в бэке они уже используются, так что пусть себе копируется пока не упрёшься в это копирование я бы не коверкал код зря, не для этого Qt придумывали.

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

В данном примере ничем. Хуже да, менее безопасно

LinuxDebian ★★★★
() автор топика
Последнее исправление: LinuxDebian (всего исправлений: 1)

при queued connection побьётся ссылка, если emit-ящие потоки/event-loop-ы разные, при direct или blocking queued останется жить

ты можешь емитить просто QByteArray без ссылки, т.к. он copy-on-write, т.е. содержимое QByteArray не будет копироваться (если не изменилось в другом потоке. если удалилось, ничего страшного), скопируется только объект QByteArray.

а, если именно вот надо менять содержимое из потока-слота, то я бы таки юзал или blockingqueued (дождаться, пока поток-слот запишет в массив) или QSharedPointer (более лучше).

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