Russian Qt Forum
Ноябрь 23, 2024, 03:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: sockets + threads, помогите :(  (Прочитано 35195 раз)
yesrus
Гость
« Ответ #15 : Март 13, 2009, 02:50 »

Спасибо! Все заработало.
Добавил аналог в свою программу...все так же отлично заработало...
Все гениальное просто как говорится...

Остался 1 вопрос-как сделать коннект из потока в основной поток...т.е. к примеру я делаю в конструкторе GUI (worker это объект в котором выполняется сокет т.е. другой поток)
Цитировать
connect(this, SIGNAL(sendData( const QString & )), worker, SLOT(sendData(const QString &)));
Как сделать то же самое(так же соеденить сигнал sendData основного потока с слотом sendData дочернего потока) из потока ? т.е. в конструкторе объекта worker ?
« Последнее редактирование: Март 13, 2009, 02:57 от yesrus » Записан
igor_bogomolov
Гость
« Ответ #16 : Март 13, 2009, 03:10 »

Не совсем понимаю зачем?
Чем неустраивает коннект в GUI, Вы же все равно worker создаете в нем?
Записан
yesrus
Гость
« Ответ #17 : Март 13, 2009, 11:46 »

Ну к примеру будет 2 или больше нитей..и коннект между ними нужен.
Записан
igor_bogomolov
Гость
« Ответ #18 : Март 13, 2009, 11:53 »

Так в чем проблема?   
Код
C++ (Qt)
connect(MyThread1, SIGNAL(signalThread1()), MyThread2, SLOT(slotThread2()));
 
Записан
yesrus
Гость
« Ответ #19 : Март 13, 2009, 12:42 »

А к основному потоку ? Какой у него идентификатор.
Записан
igor_bogomolov
Гость
« Ответ #20 : Март 13, 2009, 12:50 »

this
Или я вопроса не понял? Непонимающий
« Последнее редактирование: Март 13, 2009, 13:24 от igor_bogomolov » Записан
yesrus
Гость
« Ответ #21 : Март 13, 2009, 14:03 »

Сделать коннект из к примеру run() функции дочернего потока, если написать this то будет соединение с этим потоком..а нужно с основным.
« Последнее редактирование: Март 13, 2009, 14:15 от yesrus » Записан
igor_bogomolov
Гость
« Ответ #22 : Март 13, 2009, 15:20 »

Если уж так сильно хочется, можно сделать так:

Код:
Client *pClient;
Client::Client(QWidget *parent) : QMainWindow(parent) {
        pClient = this;
        ...
}

Код:
#include "Client.h"
extern Client *pClient;

void ThreadSocket::run() {
    ...
    connect(this, SIGNAL(displayMessage(const QString &)), pClient, SLOT(displayMessage(const QString &)));
    ...
    exec();
}

Только на мой взгляд так делать неправельно. Еще раз повторюсь. Вы все равно создаете экземпляры класса ThreadSocket в конструкторе, в данном примере, класса Client. Вот и создавайте все коннекты между этими классами там же. Т.е

Код:
Client::Client(QWidget *parent) : QMainWindow(parent) {
    ...
    threadSocket = new ThreadSocket();
    connect(threadSocket, SIGNAL(displayMessage(const QString &)), this, SLOT(displayMessage(const QString &)));
    connect(this, SIGNAL(clientSignal()), threadSocket, SLOT(slotSocket()));
    ...
    threadSocket_1 = new ThreadSocket();
    connect(threadSocket_1, SIGNAL(displayMessage(const QString &)), this, SLOT(displayMessage(const QString &)));
    ...
    connect(threadSocket, SIGNAL(signalSocket()), threadSocket_1, SLOT(slotSocket_1));
    ...
}
« Последнее редактирование: Март 13, 2009, 15:30 от igor_bogomolov » Записан
yesrus
Гость
« Ответ #23 : Март 13, 2009, 15:43 »

Понятно, спасибо огромное за помощь!
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 21.