Хочу написать клиент-серверное приложение, и по задумке каждый вновь создаваемый сокет должен работать в отдельном потоке. Работа потока начинается с выполнения функции run(), в котрой я и создаю свой сокет:
Код: Выделить всё
class Socket : public QTcpSocket
{
Q_OBJECT
public:
ClientServer *window;
Socket(int sockDeskr,QObject *parent);
public slots:
void read();
void read_error();
void deleteLater();
void write();
};
class Thread : public QThread
{
Q_OBJECT
public:
ClientServer *window;
Thread(int sockDeskr,QObject *parent);
void run();
private:
int sockDeskr;
};
Socket::Socket(int sockDeskr,QObject *parent):QTcpSocket(parent)
{
window=(ClientServer *)parent;
this->setSocketDeskriptor(sockDeskr);
connect(this,SIGNAL(readyRead()),this,SLOT(read()));
connect(this,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(read_error()));
connect(window->pushButton_3,SIGNAL(clicked()),this,SLOT(write()));
}
void Socket::read()
{
QByteArray bar=this->readAll();
QString str;
str.append(bar);
window->textEdit->setText(str);
}
void Socket::read_error()
{
QMessageBox *mb=new QMessageBox(this);
mb->setText(codec->toUnicode("Ошибка сокета: ")+this->errorString());
mb->exec();
}
void Socket::write()
{
QByteArray bar;
bar.append(window->textEdit->toPlainText());
this->write(bar);
}
/////////////////////////////////////////////////////////<-----------Thread-------->/////////////////////////
void Thread::Thread(int sockDeskr,QObject *parent)
{
this->sockDeskr=sockDeskr;
window=(ClientServer *)parent;
}
void Thread::run()
{
Socket *soc=new Socket(sockDeskr,window);
}Подскажите сокет при такой реализации будет работать в отдельном потоке, или я в потоке просто создаю экземпляр сокета и не более, и для правильной работы мне надо реализовывать слоты для сокета в классе Thread.