I establish a multi-thread server,but encouter some problems,after declare tcpsocket in thread::run,I want to operate the tcpsocket in slot ,such as write or read,but i couldnot.
how to resolve this problem,forgive my poor english,3x
the thread.h as follows
class FortuneThread
: public QThread {
Q_OBJECT
public:
FortuneThread
(int socketDescriptor,
QObject *parent
);
void run();
signals:
private:
int socketDescriptor;
bool stopped;
private slots:
void recfserver
(const QString peeradd
);
};
class FortuneThread : public QThread
{
Q_OBJECT
public:
FortuneThread(int socketDescriptor, QObject *parent);
void run();
signals:
void error(QTcpSocket::SocketError socketError);
void toserver(const QString info);
private:
int socketDescriptor;
QTcpSocket *tcpSocket;
bool stopped;
private slots:
void recfserver(const QString peeradd);
};
To copy to clipboard, switch view to plain text mode
the thread.cpp as follows
FortuneThread
::FortuneThread(int socketDescriptor,
const QString &fortune,
: QThread(parent
), socketDescriptor
(socketDescriptor
) {
};
void FortuneThread::run()
{
if (!((*tcpSocket).setSocketDescriptor(socketDescriptor))) {
emit error((*tcpSocket).error());
return;
}
(*tcpSocket).waitForDisconnected();
}
void FortuneThread
::recfserver(const QString peeradd
) {
QString text
=tr
("transfer success!");
out << (quint16)0;
out << text;
(*tcpSocket).write(block);
};
FortuneThread::FortuneThread(int socketDescriptor, const QString &fortune,
QObject *parent)
: QThread(parent), socketDescriptor(socketDescriptor)
{
};
void FortuneThread::run()
{
tcpSocket = new QTcpSocket();
if (!((*tcpSocket).setSocketDescriptor(socketDescriptor))) {
emit error((*tcpSocket).error());
return;
}
(*tcpSocket).waitForDisconnected();
}
void FortuneThread::recfserver(const QString peeradd)
{
QString text=tr("transfer success!");
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << text;
(*tcpSocket).write(block);
};
To copy to clipboard, switch view to plain text mode
when i debug,the error as follows
QObject cannot create children for a parent that is in a different thread.
(parent is QNativeSocketEngine,parent's thread is FortuneThread,current thread
is QThread)
Bookmarks