Russian Qt Forum
Ноябрь 22, 2024, 23:03
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
Процесс замерзает при работе интерфейса
Страниц:
1
2
[
3
]
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Процесс замерзает при работе интерфейса (Прочитано 23029 раз)
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Процесс замерзает при работе интерфейса
«
Ответ #30 :
Ноябрь 14, 2014, 22:33 »
Гурман, посмотрите на QThreadPool, он вам больше подайдет.
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Процесс замерзает при работе интерфейса
«
Ответ #31 :
Ноябрь 14, 2014, 22:38 »
Цитата: Old от Ноябрь 14, 2014, 22:33
Гурман, посмотрите на QThreadPool, он вам больше подайдет.
спс, но есть сомнения, что это поможет - проблема в реализации QThread, а QThreadPool скорее всего опирается на QThread
да и приложение перепахивать уже не с руки
Записан
2^7-1 == 127, задумайтесь...
vulko
Гость
Re: Процесс замерзает при работе интерфейса
«
Ответ #32 :
Ноябрь 14, 2014, 22:43 »
Цитата: Гурман от Ноябрь 14, 2014, 22:20
Проблема
с разными нитями
запускаемыми
одним и тем же QThread
.
а?! ... а?! что?! где?! ... это взрыв мозга)))
Цитата: Гурман от Ноябрь 14, 2014, 22:20
Поскольку после запуска, завершения и снова запуска нити
разные
нужно почаще общаться с капитаном очевидность!)))
после того как поток завершается, он как бы умирает. так что это так и должно быть.
я потому и предлагал вариант потока с while(running)
Цитата: Гурман от Ноябрь 14, 2014, 22:20
поток
с мутексом без мутекса
существовать не может
очередной взрыв мозга)))
Цитата: Гурман от Ноябрь 14, 2014, 22:20
поэтому переносить мутекс в run() никак нельзя, ибо этот run может выполнить поток, в котором нет и не нужны никакие мутексы, смотря какой плагин к этому потоку подключен
в разных случаях, в зависимости от конфигурации, один и тот QThread может обслуживать разные плагины - в одних есть необходимость синхронизации, в других нет - теперь понятно?
мне понятно только то, что твой интеллект почему то не позволяет иметь мьютекс, но не лочить его, если не нужно...
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Процесс замерзает при работе интерфейса
«
Ответ #33 :
Ноябрь 14, 2014, 22:44 »
Цитата: Гурман от Ноябрь 14, 2014, 22:38
спс, но есть сомнения, что это поможет - проблема в реализации QThread, а QThreadPool скорее всего опирается на QThread
Ну это не проблема QThread, он делает все согласно документации: при вызове start создаёт новый поток, в котором выполняет метод run. При завершении метода run завершается и поток.
Каждый вызов start будет порождать новый поток.
Пул же сразу запускает несколько потоков, которые ждут работу QRunnable и как только она появляется выполняют её. После выполнения работы потоки не завершаются, а ждут новую работу.
«
Последнее редактирование: Ноябрь 14, 2014, 22:46 от Old
»
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Процесс замерзает при работе интерфейса
«
Ответ #34 :
Ноябрь 14, 2014, 23:26 »
Цитата: Old от Ноябрь 14, 2014, 22:44
Цитата: Гурман от Ноябрь 14, 2014, 22:38
спс, но есть сомнения, что это поможет - проблема в реализации QThread, а QThreadPool скорее всего опирается на QThread
Ну это не проблема QThread, он делает все согласно документации: при вызове start создаёт новый поток, в котором выполняет метод run. При завершении метода run завершается и поток.
Каждый вызов start будет порождать новый поток.
Пул же сразу запускает несколько потоков, которые ждут работу QRunnable и как только она появляется выполняют её. После выполнения работы потоки не завершаются, а ждут новую работу.
Фишка в том, что не известно заранее, сколько потоков надо порождать. То есть, не известно, сколько плагинов их потребуют. Хотя, может быть, в этом есть рациональное зерно. Но придется тогда расширить функциональность плагинов, они должны сообщать, что будут использовать потоки.
Записан
2^7-1 == 127, задумайтесь...
Bepec
Гость
Re: Процесс замерзает при работе интерфейса
«
Ответ #35 :
Ноябрь 14, 2014, 23:27 »
Гурман у вас проблема - не разлоченный мутекс была.
Эта проблема в плохом коде.
Вашу логику вы пояснить не можете. Какая там архитектура хитрая. Почему вам бы тупо не создавать классы и пихать их тупо в qthread?
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Процесс замерзает при работе интерфейса
«
Ответ #36 :
Ноябрь 14, 2014, 23:37 »
Цитата: Bepec от Ноябрь 14, 2014, 23:27
Гурман у вас проблема - не разлоченный мутекс была.
Эта проблема в плохом коде.
Вашу логику вы пояснить не можете. Какая там архитектура хитрая. Почему вам бы тупо не создавать классы и пихать их тупо в qthread?
Я уже пояснил логику. Тупо пихать - не годится. Не известно заранее, что пихать. Приложение всё состоит из плагинов. Их количество и состав могут быть каждый раз разными.
Мутекс сейчас разлочен, всё пока вроде работает как надо. Проблема была в том, что
в документации QThread не указано, что каждый последовательный запуск создает новую нить, с новым ID, а не использует предыдущую
. Если бы это было указано, я бы изначально иначе построил приложение.
Записан
2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Процесс замерзает при работе интерфейса
«
Ответ #37 :
Ноябрь 15, 2014, 09:42 »
Цитата: Гурман от Ноябрь 14, 2014, 23:37
Если бы это было указано, я бы изначально иначе построил приложение.
Как же не указано?
В описании метода start говорится, что будет запущена новая нить и в ней выполниться run. В описании метода run говорится, что когда он завершится - нить разрушиться.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Процесс замерзает при работе интерфейса
«
Ответ #38 :
Ноябрь 15, 2014, 10:15 »
Цитата: Гурман от Ноябрь 14, 2014, 23:26
они должны сообщать, что будут использовать потоки.
И ещё не очень понятно, для чего такое разделение?
Нужна плагину одна или несколько ниток, ну пусть он их и запускает.
Записан
Bepec
Гость
Re: Процесс замерзает при работе интерфейса
«
Ответ #39 :
Ноябрь 15, 2014, 11:42 »
Даже есть не так, то тупо создаёте 4 потока по умолчанию и в них пихаете классы плагинов. Нужно больше - создаёте больше. Нужно удалить плагин - даёте сигнал на удаление КЛАССУ, класс уничтожается, а поток остаётся.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Процесс замерзает при работе интерфейса
«
Ответ #40 :
Ноябрь 15, 2014, 11:51 »
Цитата: Bepec от Ноябрь 15, 2014, 11:42
даёте сигнал на удаление КЛАССУ, класс уничтожается, а поток остаётся.
Верес, скажите, вы видите разницу между классами и объектами?
Записан
Bepec
Гость
Re: Процесс замерзает при работе интерфейса
«
Ответ #41 :
Ноябрь 15, 2014, 14:34 »
Знаю и вижу. И я имею в виду именно то, о чем пишу
А вы видите разницу между объектом и объектом класса?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Процесс замерзает при работе интерфейса
«
Ответ #42 :
Ноябрь 15, 2014, 15:53 »
Цитата: Bepec от Ноябрь 15, 2014, 14:34
Знаю и вижу.
А почему путаете их почти в каждой теме?
Цитата: Bepec от Ноябрь 15, 2014, 14:34
И я имею в виду именно то, о чем пишу
Это как раз не вызывает сомнений.
Цитата: Bepec от Ноябрь 15, 2014, 11:42
...даёте сигнал на удаление КЛАССУ, класс уничтожается...
Записан
Bepec
Гость
Re: Процесс замерзает при работе интерфейса
«
Ответ #43 :
Ноябрь 15, 2014, 16:19 »
Да именно так ) ибо объектов класса может быть неизвестное количество, согласно количеству плагинов.
Потому я и написал классу, хотя можно перефразировать и написать - отдать сигнал об уничтожении всем имеющимся объектам класса
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Процесс замерзает при работе интерфейса
«
Ответ #44 :
Ноябрь 15, 2014, 18:20 »
Цитата: Old от Ноябрь 15, 2014, 09:42
Цитата: Гурман от Ноябрь 14, 2014, 23:37
Если бы это было указано, я бы изначально иначе построил приложение.
Как же не указано?
В описании метода start говорится, что будет запущена новая нить и в ней выполниться run. В описании метода run говорится, что когда он завершится - нить разрушиться.
Нифига!
Цитировать
Begins execution
of the thread by calling run(), which should be reimplemented in a QThread subclass to contain your code. The operating system will schedule the thread according to the priority parameter. If the thread is already running, this function does nothing.
The effect of the priority parameter is dependent on the operating system's scheduling policy. In particular, the priority will be ignored on systems that do not support thread priorities (such as on Linux, see
http://linux.die.net/man/2/sched_setscheduler
for more details).
See also run() and terminate().
Look up this member in the source code.
Begins execution == начинает выполнение, это подразумевает, что нить
создана
.
Цитировать
The starting point for the thread. After calling start(), the newly created thread calls this function. The default implementation simply calls exec().
You can reimplemented this function to do other useful work. Returning from this method will end the execution of the thread.
See also start() and wait().
Look up this member in the source code.
Ни слова про разрушение нити.
«
Последнее редактирование: Ноябрь 15, 2014, 18:21 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Страниц:
1
2
[
3
]
4
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...