Доброго времени суток.
Знаю, тема избитая, но что-то немогу найти решение.
Есть поток с сокетом, сокет создается в run'e
socket = new QTcpSocket();
connect(socket, SIGNAL(readyRead()), SLOT(readData()));
exec();
Сам поток создаю в конструкторе окна:
thread = new MyThread();
connect(thread, SIGNAL(connected(bool)), this, SLOT(createConnection(bool)));
thread->moveToThread(thread);
thread->start();
У класса потока(MyThread) есть метод sendData, примерно такой:
socket->write(data);
socket->flush();
Так вот, при вызове в методах
окна socket->sendData(...) креатор бомбит в дебаге
QSocketNotifier: socket notifiers cannot be enabled from another thread
QSocketNotifier: socket notifiers cannot be disabled from another thread
При вызове других методов потока аналогичная ситуация, приводящая к вылету приложения.
Например метод Disconnect() { socket->abort(); } кидает
ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread 3e4dc0. Receiver '' (of type 'QTcpSocket') was created in thread 63a7c30", file kernel\qcoreapplication.cpp, line 347
и завершает приложение.
Если вместо вызова метода напрямую использовать сигналы, то ошибки нет.
connect(this, SIGNAL(SEND(const QString&), thread, SLOT(sendData(const QString&)));
Собственно интересует
из-за чего такое происходит, и правильно ли я юзаю поток.