【发布时间】:2012-05-03 11:27:48
【问题描述】:
我在 MyThread.cpp 和 .h 中定义了一个 QThread。我有一个私有的 QTcpSocket。
class MyThread: public QThread {
Q_OBJECT
public:
MyThread();
virtual ~MyThread();
public slots:
void reconnect();
signals:
protected:
void run(void);
private:
QTcpSocket *socket;
};
void MyThread::run(void) {
bool connected = false;
connected = prepareSocket(QString::fromLatin1((Global::directionIPSerialServer).toLocal8Bit().data()), 8008, socket);
}
另一方面,我在 Functions.cpp 和 .h 中定义了一组函数,它们没有定义在 Functions 类中,而是定义在命名空间中。
bool Functions::prepareSocket(QString address, int port, QTcpSocket *socket) {
socket->connectToHost(address, port);
if(!socket->waitForConnected(Global::maxTimueToConnectByTCP)){
qDebug()<<"Error: "<<socket->errorString();
return false;
}
return true;
}
然后,如果我错了,请纠正我,当我将函数调用到 Functions 以将 MyThread 的 QTcpSocket 连接到主机时,我假设我在同一个线程上,因为我是从线程调用函数我创造了一个,而不是一个不同的。
尽管如此,在 socket->connectToHost 上我得到 QObject: Cannot create children for an parent that is in a different thread. 两次。
这是为什么呢?怎么了?
【问题讨论】:
-
你在哪里创建套接字?
标签: c++ qt qthread qtcpsocket