Russian Qt Forum
Ноябрь 26, 2024, 17:41
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Методы объектов одного класса, находящихся в разных потоках.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Методы объектов одного класса, находящихся в разных потоках. (Прочитано 4245 раз)
alsav22
Гость
Методы объектов одного класса, находящихся в разных потоках.
«
:
Март 09, 2014, 09:26 »
Есть class Worker : public QObject, в нём - слот process(). Создаётся несколько объектов QThread и несколько объеков Worker. Каждый объект Worker, с помощью moveToThread(), помещается в свой поток. Метод process(), у этих объектов, общий или у каждого свой?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #1 :
Март 09, 2014, 09:56 »
Не понял что значит "общий/свой (метод)", возможно Вы хотели спросить в каких нитках они будут выполняться - это зависит от вызова и типа connect
Записан
Serr500
Гость
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #2 :
Март 09, 2014, 10:41 »
Реализация метода общая (компилятор создаст один экземпляр бинарного кода метода), он всегда будет вызываться по одному и тому же адресу для каждого объекта, но выполняется он в контексте различных объектов (получит разные указатели this). Но, кажется, Вы сами не понимаете что хотите спросить.
«
Последнее редактирование: Март 09, 2014, 10:45 от Serr500
»
Записан
Bepec
Гость
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #3 :
Март 09, 2014, 10:44 »
Он видимо хочет спросить будут ли во всех объектах Worker доступны одни и те же переменные и данные. Ответ - нет не будут, для каждого объекта будут свои переменные и данные
Записан
alsav22
Гость
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #4 :
Март 09, 2014, 21:24 »
Цитата: Igors от Март 09, 2014, 09:56
Не понял что значит "общий/свой (метод)"
Будет ли этот метод
совместным ресурсом
для объектов в разных потоках?
Цитата: Bepec от Март 09, 2014, 10:44
Он видимо хочет спросить будут ли во всех объектах Worker доступны одни и те же переменные
Где это в моём вопросе?
Цитата: Serr500 от Март 09, 2014, 10:41
Реализация метода общая (компилятор создаст один экземпляр бинарного кода метода), он всегда будет вызываться по одному и тому же адресу для каждого объекта, но выполняется он в контексте различных объектов (получит разные указатели this). Но, кажется, Вы сами не понимаете что хотите спросить.
Очень даже поимаю, что хочу спросить. Всё это азбучные истины, когда объекты находятся в одном потоке. Весь вопрос в том, что объекты находятся в разных потоках. Если реализация метода общая, то он становится
совместным ресурсом
для объектов в разных потоках, с соответствующими последствиями. Тогда, в этом методе, будут работать методы синхронизации (мьютексы и пр.), а они не работают, из чего следует, что метод не является общим ресурсом, а значит для каждого потока существует свой метод, что противоречит тому, что вы изложили и что верно, когда объекты находятся в одном потоке.
«
Последнее редактирование: Март 09, 2014, 21:28 от alsav22
»
Записан
Bepec
Гость
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #5 :
Март 10, 2014, 00:52 »
По моему вы бред несёте
ИМХО.
Записан
alsav22
Гость
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #6 :
Март 10, 2014, 05:06 »
Цитата: Bepec от Март 10, 2014, 00:52
По моему вы бред несёте
ИМХО.
Очень может быть, но хотелось бы аргументированных ответов. Я вопрос задал, и объяснил, почему он у меня возник, т.е. логику моих рассуждений. Вполне возможно, что она неверна (ветка форума для новичков или для профи?). В чём? Почему? А писать, вместо помощи, что человек, мол, больной и бредит, как-то не очень по-взрослому, по-моему...
«
Последнее редактирование: Март 10, 2014, 05:19 от alsav22
»
Записан
Bepec
Гость
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #7 :
Март 10, 2014, 08:15 »
Я не понимаю что вы имеете в виду под "общий ресурс". Поясните простыми словами. (простые != фразы из учебников и диспутов)
И да, объекты не в потоке и объекты в потоке - это одно и то же. Объект будет всё так же лежать по определённому адресу, просто дёргать его будут в другое время.
Конкретно в вашем случае будет несколько областей памяти в которых будут созданы объекты классов Worker. И ни один другого знать не будет. И ничего совместного у них не будет. И вообще они будут знать только своего родителя QObject.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #8 :
Март 10, 2014, 09:09 »
Цитата: alsav22 от Март 09, 2014, 21:24
Будет ли этот метод
совместным ресурсом
для объектов в разных потоках?
Нет, не будет, это просто код который может выполняться в любой нитке. Разумеется используя контекст объекта/нитки, но сам по себе код не ресурс.
Цитата: alsav22 от Март 09, 2014, 21:24
Тогда, в этом методе, будут работать методы синхронизации (мьютексы и пр.), а они не работают, из чего следует,
Проще и лучше привести пример что не работает,
Записан
Serr500
Гость
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #9 :
Март 10, 2014, 09:28 »
Цитата: alsav22 от Март 09, 2014, 21:24
Весь вопрос в том, что объекты находятся в разных потоках. Если реализация метода общая, то он становится
совместным ресурсом
для объектов в разных потоках, с соответствующими последствиями. Тогда, в этом методе, будут работать методы синхронизации (мьютексы и пр.), а они не работают, из чего следует, что метод не является общим ресурсом, а значит для каждого потока существует свой метод, что противоречит тому, что вы изложили и что верно, когда объекты находятся в одном потоке.
Реализация
метода общая, его код - совместный ресурс, но каждый запуск этого метода в пределах разных потоков (и даже разных экземпляров класса) -
независим
. Каждый раз при запуске метода он выполняется в контексте вызывающего объекта, получает его ресурсы, локальные переменные для каждого запуска свои. Подозреваю, что у Вас внутри метода создаётся мьютекс и синхронизации не происходит, потому что для каждого объекта мьютекс будет свой. Для таких случаев мьютекс должен быть глобальным (static для класса).
P.S. Вы путаете
реализацию
метода, которую создаёт компилятор, и
выполнение
метода, происходящее в runtime. Это абсолютно разные вещи! На Ваш вопрос в первом посте ответ такой: метод общий для всех и одновременно для каждого свой.
Записан
alsav22
Гость
Re: Методы объектов одного класса, находящихся в разных потоках.
«
Ответ #10 :
Март 10, 2014, 20:00 »
Bepec
,
Igors
,
Serr500
, благодарю за ответы, дошло.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...