На основе примера из справки пытаюсь сделать многопоточный сервер:
class NetworkServer : public QTcpServer
{
Q_OBJECT
public:
explicit NetworkServer(QObject *parent = 0);
private:
void incomingConnection(int handle);
};
void NetworkServer::incomingConnection(int handle)
{
SocketWorkThread *thread = new SocketWorkThread(this, handle);
thread->start();
}
Поток:
class SocketWorkThread : public QThread
{
Q_OBJECT
public:
explicit SocketWorkThread(QObject *parent = 0,
int _socketDescriptor = 0);
void run();
private:
QTcpSocket *socket;
int m_socketDescriptor;
public slots:
void on_recieveCommand();
};
void SocketWorkThread::run()
{
socket = new QTcpSocket(this);
connect(socket, SIGNAL(readyRead()),
this, SLOT(on_recieveCommand()));
socket->setSocketDescriptor(m_socketDescriptor);
socket->moveToThread(this);
exec();
}
void SocketWorkThread::on_recieveCommand()
{
// тут большая ф-я по обработке данных и работе с клиентом
}
В примере все тяжелая работа происходит в QThread::run(), но у меня сокет должен в отдельном потоке сначала слушать данные от клиента, а потом передавать ему данные, поэтому в run() не соображу как это поместить.
В моем коде не получается никакого отдельного потока, GUI "висит" при работе сокета. Как тут быть?