Работа с потоками |
Здравствуйте, гость ( Вход | Регистрация )
Работа с потоками |
Гость_zayac_val_* |
30.1.2009, 20:05
Сообщение
#1
|
Гости |
Помогите разобраться с потоками.
Хочу написать клиент-серверное приложение, и по задумке каждый вновь создаваемый сокет должен работать в отдельном потоке. Работа потока начинается с выполнения функции run(), в котрой я и создаю свой сокет: CODE 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. |
|
|
Litkevich Yuriy |
30.1.2009, 20:51
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Почитай эту тему, там и про сокеты и про потоки
|
|
|
Гость_zayac_val_* |
3.2.2009, 20:38
Сообщение
#3
|
Гости |
В моем клиент-серверном приложении, сокет(клиента) я создал в основном потоке, при коннекте к серверу в нем создается дочерний поток в котором создается сокет, предназначенный для общения с сокетом из основного потока. Проблема как обмениваться сигналами между потоками. Т.е. когда один сокет вызывает функцию write(), другой сокет сигнал readyRead не получает.
|
|
|
kuler |
4.2.2009, 11:40
Сообщение
#4
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
может туплю, но не вижу где в write посылается сигнал.
|
|
|
Текстовая версия | Сейчас: 27.12.2024, 4:11 |