Russian Qt Forum
Ноябрь 23, 2024, 05:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перемещение объекта из одного потока в другой.  (Прочитано 3935 раз)
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?
Записан
andrew.k
Гость
« Ответ #1 : Август 02, 2012, 21:30 »

если ты создаешь свой сокет в перегруженном методе run класса наследника QThread, то созданный экземпляр access_socket уже принадлежит текущему потоку, поэтому перемещать его не нужно и нельзя.

Судя по сообщению так и есть.
Если не так, приведи код где ты создаешь сокет, где перемещаешь, где создаешь pOtherObject.
« Последнее редактирование: Август 02, 2012, 21:32 от andrew.k » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Август 02, 2012, 22:05 »

Не там вызываете moveToThread.
moveToThread надо вызывать из того потока в котором объект сейчас находится, а не из того, в который он должен попасть.
То есть moveToThread «выталкивает» из текущего потока в другой, но не может «втянуть» из другого в текущий.
Записан
Yegor
Гость
« Ответ #3 : Август 03, 2012, 11:08 »

Сейчас moveToThread вызываю из того потока в котором объект access_socket сейчас находится. И все работает!
Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.