На основе примера из справки пытаюсь сделать многопоточный сервер:
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 "висит" при работе сокета. Как тут быть?