Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379

Метод класса в QtConcurrent

01.04.2023, 23:16. Показов 5290. Ответов 26

Студворк — интернет-сервис помощи студентам
Всем привет.
Прошу прояснить некоторые моменты по сабжу.

Допустим есть класс:
C++ (Qt)
1
2
3
4
5
6
7
class A:public QObject{
public:
    using QObject::QObject;
 
    void foo(int i) { qDebug()<<"method of A"; }
    static void st_foo(int i) { qDebug()<<"static method of A"; }
};
Нашел в инете:
C++ (Qt)
1
2
3
4
    A *aa = new A;
    QtConcurrent::run(std::bind1st(std::mem_fun(&A::foo),  aa), 0); //нестатический
 
    QtConcurrent::run(&A::st_foo, 0); //статический
Собственно, вопросы:
1. Корректно ли запускать нестатические методы в потоке таким образом?
(и вообще запускать отдельно метод обьекта класса?)
2. Как я понимаю, в случае с нестатическим методом, обьект класса создается в одном потоке, метод запускается в другом.
Должен ли я при этом перемещать обьект класса в поток?
C++ (Qt)
1
2
auto t=new QThread;
aa->moveToThread(t);
Если сделать так, обьект класса не обязательно окажется в том же потоке, в котором запустится его метод?
Описание ф-ии run() этот вопрос вроде не проясняет.
Runs function in a separate thread. The thread is taken from the global QThreadPool. Note that function may not run immediately; function will only be run once a thread becomes available.
Добавлено через 54 минуты
зы
еще не совсем понимаю этот код:
Цитата Сообщение от sdf45 Посмотреть сообщение
std::bind1st(std::mem_fun(&A::foo),  aa)
Читаю сейчас на cppreference, вкратце понял что для метода foo создается обьект-обертка, биндтся с обьектом класса, и уже этот обьект переносится затем в отдельный поток?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.04.2023, 23:16
Ответы с готовыми решениями:

Ошибки при передачи фукнции класса в QtConcurrent::mappedReduced
Здравствуйте. Есть достаточно простенькая программка суммирования буфера из компонентов вектора. Решил ускорить ее с помощию...

Как вызвать определенный метод переданного класса через метод другого класса?
Добрый день. Захотел я вызвать в методе класса метод некоего другого класса, о котором я пока не знаю. Мне пришла в голову...

Как нужно изменить метод класса, чтобы он ссылался на метод дочернего класса
Всем привет. Увидел где-то такой метод, но не запомнил как он пишется полностью. Вот его часть: public static void...

26
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
02.04.2023, 21:29  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zayats80888 Посмотреть сообщение
Или вы о чем-то другом говорите?
уже и сам не знаю, что несу
- запускается метод foo() обьекта 'e' в функции run(), в каком -то потоке.
- Как узнать, в каком?
- QThread::currentThread(), вызванный в run() - гарантированно покажет тот поток, где запускается метод?
Если так, то у меня вопросов больше нет, вариант классный и рабочий.
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
02.04.2023, 21:35
Цитата Сообщение от sdf45 Посмотреть сообщение
Но, насколько я понимаю, вариант работает.
Вообще, в этом "перемещении" нет смысла, т.к. во время выполнения задачи не осуществляется обработка очереди событий в потоке. А там где это нужно, обычно не используется механизм QtConcurrent. Это я просто на ваш вопрос отвечал, как можно переместить в поток пула.

Цитата Сообщение от sdf45 Посмотреть сообщение
QThread::currentThread(), вызванный в run() - гарантированно покажет тот поток, где запускается метод?
Ну да, а чего он еще может показать?
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.04.2023, 21:38
Цитата Сообщение от zayats80888 Посмотреть сообщение
в этом "перемещении" нет смысла
В наследовании от QObject нет смысла. Судя по примерам там простые классы используются.
1
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
02.04.2023, 21:44  [ТС]
zayats80888, пойду изучать литературу по сабжу, что бы не задавать дурных вопросов
Спасибо Вам еще раз за ответы!

Добавлено через 2 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
В наследовании от QObject нет смысла. Судя по примерам там простые классы используются.
ну, в будущем могут понадобиться сигналы слоты например, наследования... Вообще это все тесты...
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
02.04.2023, 21:45
Цитата Сообщение от nmcf Посмотреть сообщение
В наследовании от QObject нет смысла.
Этот смысл может быть в другой плоскости, если работаем с тем, что уже есть.
А городить его специально, для того чтобы самому себе просигналить о завершении задачи - да, лишнее, там есть механизм future.
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.04.2023, 21:48
Цитата Сообщение от sdf45 Посмотреть сообщение
в будущем могут понадобиться сигналы слоты
Тогда QtConcurrent придётся не использовать. Не тот инструмент.
1
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
02.04.2023, 22:02  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Тогда QtConcurrent придётся не использовать. Не тот инструмент.
ясно, спасибо... буду курить мануалы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2023, 22:02

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

В C++ метод производного класса всегда переопределяет метод базового класса?
#pragma once #include &lt;iostream&gt; using namespace std; class Fish { public: virtual ~Fish() = default;

Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Что такое this?
Раздел 1. Строки: нужен фрагмент кода. Обязательно используйте функции для работы со строками. Как найти адрес последнего символа строки?...

С помощью делегата из одного класса вызвать private метод с другого класса
доброго времени суток. такой вопрос. С применением делегатов и пониманием проблем нет когда происходит простой вызов из Main() функции. Но...

Передача названия класса в метод другого класса в качестве входных данных
У меня есть класс &quot;class1&quot;, от которого наследуется несколько однотипных классов classX, classY, ..., classX1, classY1, ..., classXn,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru