![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Не совсем. У semibug 2й вариант включает не только поток, но и
Так что 2й вариант распадается на несколько меньших подвариантов, и их тоже надо тщательно выбирать |
||||||
|
|||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Так никто и не спорит. И в первом случае тоже есть разные варианты обеспечения нормальной работы интерфейса. Не соглашусь, второму (рабочему) потоку должно быть глубоко по барабану, кто и как его прогресс отображает: может, я в двух окнах хочу это сделать (я, кстати, часто так и делаю). И не надо замусоривать (возможно) сложный алгоритм всякой ерундой типа рисования прогресса. UI - дело основного потока. Насчет того, запрашивать прогресс или пусть поток сообщает - не очень существенно, дело вкуса. Я понимаю, что тебе не нравится, что основной поток всякой фигней занимается (по таймеру в основном потоке проверяет завершение выполнение задачи), но это решаемо в смысле дизайна. Я, например, написала специальный управляющий элемент (панель = прогресс + кнопка Стоп), который как совершенно отдельная сущность легко вставляется в любой диалог и требует буквально пары точек взаимодействия (получает хандл задачи и дальше сам с ней разбирается). -------------------- ... |
|||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Про отображение речь не шла, речь шла об оповещении, что состояние изменилось.
Доставка в противоположном направлении требует синхронизации, защиты разделяемых переменных, и возможно организации callback'ов из основного потока в 2й поток (для запросов) - это явно сложнее, чем один SendMessage
|
||||||||
|
|||||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Опять не соглашусь. Иногда - да, так нормально. А иногда лучше основному потоку решать, когда запрашивать. Все зависит от задачи. Скажем, если основному потоку больше делать нечего, как сообщения принимать - ну пусть. А представь, что процесс одной перерисовки (я не про прогресс, конечно) весьма ресурсо-емкий. Тогда лучше основной поток сам соображает когда ему лучше обновиться. Критическая секция - было бы о чем говорить, кроме того, для запроса прогресса можно обойтись Interlock-функциями. В общем, нельзя сказать, что одно решение абсолютно всегда лучше другого. Ну да, конечно, только кода там кот наплакал - идея-то простая. -------------------- ... |
|||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
В таком случае основной поток должен знать что то о рабочем потоке, в частности где у него лежит этот самый прогресс и как его достать. А это лишние логические связи в программе
|
||||||||
|
|||||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |