crossplatform.ru

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


  Ответ в Работа с потоками
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kuler Дата 4.2.2009, 11:40
  может туплю, но не вижу где в write посылается сигнал.
zayac_val Дата 3.2.2009, 20:38
  В моем клиент-серверном приложении, сокет(клиента) я создал в основном потоке, при коннекте к серверу в нем создается дочерний поток в котором создается сокет, предназначенный для общения с сокетом из основного потока. Проблема как обмениваться сигналами между потоками. Т.е. когда один сокет вызывает функцию write(), другой сокет сигнал readyRead не получает.
Litkevich Yuriy Дата 30.1.2009, 20:51
  Почитай эту тему, там и про сокеты и про потоки
zayac_val Дата 30.1.2009, 20:05
  Помогите разобраться с потоками.
Хочу написать клиент-серверное приложение, и по задумке каждый вновь создаваемый сокет должен работать в отдельном потоке. Работа потока начинается с выполнения функции 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.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 2.8.2025, 3:29