Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сигнал из другого потока 
V
    Опции темы
xbarmaglot
Дата 6.4.2017, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



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

что-то вроде этого (схематично), только поток запускает не он, а другой объект,
а данные передаются через цепочку обязанностей

Код

struct Data {...};
class Some : public QThread {
    Q_OBJECT
 
private:
    virtual void run(void) override
    {
        ...
        emit sendEvent(data);
    }
 
signals:
    void sendEvent(const Data& data);
};
 
class Receiver : public QObject {
    Q_OBJECT
 
public slots:
    void recvEvent(const Data& data);
};
 
main()
{
    Some some;
    Receiver recv;
    connect(&some, &Some::sendEvent, &recv, &Receiver::recvEvent);
    some.start();
 
    exec();
}


connect проходит без ошибок, но данные не приходят.
подозреваю, что emit помещает данные в QEventLoop вторичного потока, а не главного.

Как тогда вызвать сигнал из вторичного потока, чтобы он попал в главный?

З.Ы. moveToThread не канает, т.к. я не знаю про поток ничего.
Кроме этого, данные могут приходить и из главного потока
PM MAIL   Вверх
Alexeis
Дата 6.4.2017, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 1
Всего: 459



Цитата(xbarmaglot @  6.4.2017,  22:43 Найти цитируемый пост)
З.Ы. moveToThread не канает, т.к. я не знаю про поток ничего.
Кроме этого, данные могут приходить и из главного потока 

  Можно попробовать явно указать DirectConnection в функции connect тогда слот всегда будет вызываться в контексте эмита. И синхронизацию доступа значит руками.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
xbarmaglot
Дата 7.4.2017, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



Цитата(Alexeis @  6.4.2017,  23:25 Найти цитируемый пост)
Можно попробовать явно указать DirectConnection в функции connect тогда слот всегда будет вызываться в контексте эмита. И синхронизацию доступа значит руками. 


Не работает. Прикол в том, что и сообщений об ошибках нет
PM MAIL   Вверх
xbarmaglot
Дата 7.4.2017, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



решил. мой косяк. спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1288 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.