crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Сигнал в синлтон в многопоточом варианте
Abesh
  опции профиля:
сообщение 18.4.2011, 17:30
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 4.6.2010
Пользователь №: 1780

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




Репутация:   0  


Читал, все что до чего могли добраться руки, но не помогает (если, честно впервые применяю сигналы\слоты в многопоточности)
читал доку, http://habrahabr.ru/blogs/qt_software/115835/ и оригинал, и еще сверху.

Есть синглтон (TT600Controller) есть класс, наследуемый от Qthread c вот таким вот run-ом:

void HardwareModule::run()
{
    TT600Controller *tt600controller;

    tt600controller=TT600Controller::StartUse(); //или в классике instance()

    this->mutex.unlock();
    exec();
  }


Есть еще простенький класс, наследуемый от QObject c вот такими методом:
bool AngelSensor::start()
{
    QString error;
    controller=TT600Controller::StartUse();
    QObject::connect(this, SIGNAL(connect (uint, QString&) ), controller, SLOT(connect(uint,QString&)) );
    emit connect(1,error);

    return true;
}


Проблема заключается в том, что слот не вызывается.

В указанных статьях что-то говориться про Q_INVOKABLE, но не совсем вкурил как его юзать, тупое копирование доки по этому макросу не спасают ситуацию


Да, вариант с moveToThread вообще не вариант
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 19.4.2011, 13:32
Сообщение #2





Гости








    


М-да, надо чаще смотреть в консоль приложения. Выяснилось, что-то в moc не зарегистрированы "ссылочные" типы, т.е (что-то QString&) и если все в одном потоке все нормально, то при копировании в очередь событий, как и обещают тролли, возникают проблемы. При попытке зарегистрировать подобные типы, возникают какие-то ошибки компиляции, с которыми я не стал пока разбираться, а просто убрал все передачи по ссылкам .
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 19.4.2011, 14:28
Сообщение #3


Старейший участник
****

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

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




Репутация:   12  


между потоками лучше ссылки не передавать, особенно на объекты библиотеки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Abesh
  опции профиля:
сообщение 19.4.2011, 15:53
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 4.6.2010
Пользователь №: 1780

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




Репутация:   0  


Ну Qstring это не объект библотеки, а контейнер.
Но иногда приходиться, передавать по ссылкам или указателям, из-за стоимости копирования, гораздо дешевле бывает залочить поток.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.4.2024, 0:07