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;
}
次に、間違っている場合は修正します。関数を関数に呼び出してMyThreadのQTcpSocketをホストに接続すると、同じスレッドにいると思います。これは、自分が持っているスレッドから関数を呼び出しているためです。作成されたものであり、別のものではありません。
それにもかかわらず、socket-> connectToHostでQObjectを取得しています:別のスレッドにある親の子を作成できません。2回。
何故ですか?どうしたの?