crossplatform.ru

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

4 страниц V  < 1 2 3 4 >  
Ответить в данную темуНачать новую тему
> Qthread & сигналы
OrSOn
  опции профиля:
сообщение 8.12.2009, 17:28
Сообщение #21


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 8.12.2009
Пользователь №: 1289

Спасибо сказали: 0 раз(а)




Репутация:   0  


Нет, это я уже все вычитал, поэтому когда я использую эту функцию, я в качестве parent задаю 0, функция срабатывает нормально, иначе бы в дебаге выкинуло с ошибкой... а почему придется? Ведь в примере без нее все нормально работает... Кстати, я попробовал еще упростить в своей программе, в функции мейн написал:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Server server;
    server.show();
    srand(time(0));
    NThread *tmpThread = new NThread( 0 );
    QObject::connect( tmpThread, SIGNAL( endThreadSocket( PrioritySocket ) ), &server, SLOT( socketToList( PrioritySocket ) ) );
    tmpThread->start();
    return app.exec();
}

Thread, по-прежнему, в ране в цикле выдает сигналы... Результат тот же, в слот не попадаю, хоть ты тресни..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 8.12.2009, 17:32
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(OrSOn @ 8.12.2009, 17:28) *
а почему придется? Ведь в примере без нее все нормально работает...

В каком примере работает без нее?

Вызывать придется для того, чтобы connect создал подключение, которое будет работать через очередь сообщений.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
OrSOn
  опции профиля:
сообщение 8.12.2009, 17:36
Сообщение #23


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 8.12.2009
Пользователь №: 1289

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да, я тупанул, вижу, где в примере используется эта функция, вписал у себя, результата все еще нет...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.12.2009, 0:07
Сообщение #24


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


OrSOn, прочитай тему: Справка по кнопкам и тэгам форума
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
OrSOn
  опции профиля:
сообщение 9.12.2009, 9:49
Сообщение #25


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 8.12.2009
Пользователь №: 1289

Спасибо сказали: 0 раз(а)




Репутация:   0  


Извиняюсь за оформление и спасибо за ссылку! А по теме... Я понял, почему у меня не работало, но не понимаю, с чем это связано. Суть в том, что я имел сигнал формата

void mySignal( PrioritySocket sgn)

Причем PrioritySocket - это структура из 2 полей( QTcpSocket *, int ). Так вот почему-то ее передавать из потока не хочет, хотя в поток она сигналом отлично отправлялась до введения moveToSocket. С чем это может быть связано?

Забыл добавить, что если вместо PrioritySocket передавать указатель на него, все отлично передается, но все равно хотелось бы понять, почему сам объект не пересылается...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 9.12.2009, 9:49
Сообщение #26


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(OrSOn @ 9.12.2009, 9:46) *
Причем PrioritySocket - это структура из 2 полей( QTcpSocket *, int ). Так вот почему-то ее передавать из потока не хочет, хотя в поток она сигналом отлично отправлялась до введения moveToSocket. С чем это может быть связано?

int qRegisterMetaType ( const char * typeName )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
OrSOn
  опции профиля:
сообщение 9.12.2009, 9:51
Сообщение #27


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 8.12.2009
Пользователь №: 1289

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 9.12.2009, 9:49) *
int qRegisterMetaType ( const char * typeName )


не совсем понял, к чему это? Ведь отдельно int в сигнале передается, отдельно QTcpSocket * передается, а в структуре вместе не хотят...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 9.12.2009, 9:56
Сообщение #28


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(OrSOn @ 9.12.2009, 9:51) *
Цитата(BRE @ 9.12.2009, 9:49) *
int qRegisterMetaType ( const char * typeName )


не совсем понял, к чему это? Ведь отдельно int в сигнале передается, отдельно QTcpSocket * передается, а в структуре вместе не хотят...

Типы, которые используются в сигнал-слотах, должны быть известны мета-объектной системе Qt.

Сообщение отредактировал BRE - 9.12.2009, 9:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
OrSOn
  опции профиля:
сообщение 9.12.2009, 9:57
Сообщение #29


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 8.12.2009
Пользователь №: 1289

Спасибо сказали: 0 раз(а)




Репутация:   0  


Тогда не понимаю, почему у меня из основного потока в дополнительный все отлично пересылалось. Ну да ладно, главное, что теперь знаю,к ак обойти сие дело. Спасибо большое за помощь!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
OrSOn
  опции профиля:
сообщение 9.12.2009, 10:37
Сообщение #30


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 8.12.2009
Пользователь №: 1289

Спасибо сказали: 0 раз(а)




Репутация:   0  


Поспешил я с тем, что все получилось... Снова нужна помощь... Суть в том, что да, из потока теперь сигналы отсылаются, только вот в поток сигналы перестали доходить... Я вот попробовал несколько изменить приведенный выше пример, добавив в него обратный сигнал:

Пример

#include <QApplication>          
#include <QThread>              
#include <QDebug>                

class Thread : public QThread
{                            
    Q_OBJECT                
public:                      
    Thread() : QThread( 0 ) { moveToThread( this ); }

signals:
    void started();
    void stopped();

protected:
    void run()
    {        
        emit started();
        sleep( 2 );    
        emit stopped();
    }    
public slots:
    void signalReceived()
    {
        qDebug() << "Signal received.";
    }
              
};                    

class Recv : public QObject
{
    Q_OBJECT
public:
    Recv() : QObject( 0 ) {}

signals:
    void received();

public slots:
    void threadStarted()
    {
        qDebug() << "Thread started.";
        emit received();
    }

    void threadStopped()
    {
        qDebug() << "Thread stopped.";
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    Recv recv;
    Thread thread;

    QObject::connect( &thread, SIGNAL( started() ), &recv, SLOT( threadStarted() ) );
    QObject::connect( &thread, SIGNAL( stopped() ), &recv, SLOT( threadStopped() ) );

    QObject::connect( &recv, SIGNAL( received() ), &thread, SLOT( signalReceived() ) );

    thread.start();

    return app.exec();
}

#include "main.moc"



Так вот в signalReceived() он не заходит...

Черт, снова напутал с оформлением, извиняюсь перед модераторами!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V  < 1 2 3 4 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 3.1.2025, 6:19