Название: Перемещение объекта из одного потока в другой. Отправлено: Yegor от Августа 02, 2012, 20:58 Здравствуйте!
Имею Объект: Код: QTcpSocket *access_socket = new QTcpSocket(NULL); Далее нужно переместить его GUI потока в другой поток: Код: access_socket->moveToThread(pOtherThread); Я так предполагаю, что эта строка переместит объект access_socket в другой поток - в pOtherThread. И там этот объект будет обрабатываться. В это время в консоле появляется: QObject::moveToThread: Current thread (0xebd1a98) is not the object's thread (0xd329930). Cannot move to target thread (0xebd1a98) Подскажите, пожалуйста, в чем ошибка. И что с этим делать. Правильно ли я понял суть moveToThread? Название: Re: Перемещение объекта из одного потока в другой. Отправлено: andrew.k от Августа 02, 2012, 21:30 если ты создаешь свой сокет в перегруженном методе run класса наследника QThread, то созданный экземпляр access_socket уже принадлежит текущему потоку, поэтому перемещать его не нужно и нельзя.
Судя по сообщению так и есть. Если не так, приведи код где ты создаешь сокет, где перемещаешь, где создаешь pOtherObject. Название: Re: Перемещение объекта из одного потока в другой. Отправлено: LisandreL от Августа 02, 2012, 22:05 Не там вызываете moveToThread.
moveToThread надо вызывать из того потока в котором объект сейчас находится, а не из того, в который он должен попасть. То есть moveToThread «выталкивает» из текущего потока в другой, но не может «втянуть» из другого в текущий. Название: Re: Перемещение объекта из одного потока в другой. Отправлено: Yegor от Августа 03, 2012, 11:08 Сейчас moveToThread вызываю из того потока в котором объект access_socket сейчас находится. И все работает!
Спасибо! |