crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Работа с потоками
Гость_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 посылается сигнал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 4:11