Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379

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

01.04.2023, 23:16. Показов 5071. Ответов 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
6352 / 3523 / 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
6352 / 3523 / 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
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru