Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скорость посылки сообщений окну, какая будет нормальной 
V
    Опции темы
asmdzen
Дата 6.8.2011, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



есть поток который качает файл из инета, при поступлении очередного блока данных хочу послать сообщение окну отрисовывающему состояние файла на данный момент об этом событии, т.е. пришли данные с такого-то смещения с такой-то длинной. интересует пропускная способность обработки сообщений. (файлов могут быть и больше)
заранее благодарен.

Добавлено через 14 минут и 35 секунд
или просто если взять паттерн observer и посылать сообщения типа update всем observer'ам через системные сообщения (т.е. обсерверы это элементы окна), каковым будет самый короткий интервал между этими сообщениями если предположить что конечный объект сразу обрабатывает эти сообщения?
PM MAIL   Вверх
volatile
Дата 6.8.2011, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Посылайте асинхронные сообщения.
т.е в винде например не SendMessage (), а PostMessage ();
Они отрабатывают моментально.
Тем самым поток считывающий файл, не будет зависеть от скорости отрисовки.

И еще для повышения эффективности, в потоке который отрисовывает, можно сделать фильтрацию, и обрабатывать сообщения не чаще определенного интервала. Потому как нет смысла отрисовывать с  высокой частотой (5000 раз в сек. например)
Нужно выставить разумную верхнюю частоту,  2-10 раз в секунду.

Того же самого можно добиться посылая сообщения не по приходу блока, а просто по таймеру.

PM MAIL   Вверх
asmdzen
Дата 6.8.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



Цитата(volatile @  6.8.2011,  13:25 Найти цитируемый пост)
не SendMessage (), а PostMessage ();

ну это и так понятно ) хотя я работаю с wxwidgets AddPendingEvent()

Цитата(volatile @  6.8.2011,  13:25 Найти цитируемый пост)
5000 раз в сек

предположим я с такой скоростью посылаю сообщения, если интерфейс затормозит на секунду, они не пропадут? там нет ограничения на количество ожидающих сообщений?

Цитата(volatile @  6.8.2011,  13:25 Найти цитируемый пост)
посылая сообщения не по приходу блока, а просто по таймеру.

но тогда что именно я буду посылать? ведь за один раз я могу послать только один блок, или мне их склеивать и добавлять в контейнер а по таймеру уже посылать контейнер? можно и так попробовать )

раньше у меня интерфейс по таймеру обращался напрямую к структуре файла и читал эти блоки, но это добавляет всякие lock'и и все такое, в общем вроде получается удобней через сообщения работать.



PM MAIL   Вверх
volatile
Дата 6.8.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Если сообщения поступают чаще чем поток может их обработать, то ничего хорошего не будет.
Для этого даже не нужно знать внутреннее устройство системы.
Понятно, что либо система обрежет очередь, либо память забьется до предела.
Нет ?

PM MAIL   Вверх
Dem_max
Дата 6.8.2011, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



вообще посылать сообщения чаще чем 4 раза в сек не имеет смысла


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
alexvs11
Дата 6.8.2011, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



а надеюсь сообщения используются не для передачи данных?
мне кажется логичным добавлять в буффер данные, а к нему приципить Event
GUI поток делает WaitForSingleObject на Event, меняет состояние, делает таймаут, снова ждет и так далее

PM MAIL   Вверх
asmdzen
Дата 6.8.2011, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



Цитата(Dem_max @  6.8.2011,  16:07 Найти цитируемый пост)
вообще посылать сообщения чаще чем 4 раза в сек не имеет смысла 

это почему же? или так принято )
4 раза в секунду не так уж и часто, невооруженным взглядом видно торможение


Цитата(alexvs11 @  6.8.2011,  16:10 Найти цитируемый пост)
а надеюсь сообщения используются не для передачи данных?

именно так
Цитата(alexvs11 @  6.8.2011,  16:10 Найти цитируемый пост)
GUI поток делает WaitForSingleObject на Event, меняет состояние, делает таймаут, снова ждет и так далее

не совсем понятно что происходит.
т.е. типа семафор какой-то, включаю его когда есть новые данные, GUI их забирает. Но если таких буферов неопределенное количество?
PM MAIL   Вверх
Dem_max
Дата 6.8.2011, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



патамушта, смысла делать чаще нету, ибо реакция обновления будет происходит довольно таки быстро. Ты хотя бы попробуй постучать пальцем по столу, ударить 4 раза за 1 сек, если сможешь то я поменяю свою позицию. 


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
asmdzen
Дата 6.8.2011, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



Dem_max, я извиняюсь, наверное не правильно выразил смысл задания.
представь utorrent, на вкладке "Общие" есть две полоски "Загружено", "Доступно", у меня должна получится такая полоска, если блоки в этой полоске будут появляться чаще 4 в секунду это будет заметно, да я согласен, для какого-то счетчика бессмысленно обновление с такой скоростью, но у меня не какой-то номер )
PM MAIL   Вверх
volatile
Дата 6.8.2011, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



asmdzen, здесь, нужно отделить котлеты от мух.
Нужно отделить отрисовку окна, от приема информативных сообщений.
Т.е сообщения нужно обрабатывать быстро. Накапливать информацию где-то.
А вот отрисовку производить с определенной частотой, какую выберете сами. Но в любом случае не выше кадровой развертки. 


Это сообщение отредактировал(а) volatile - 6.8.2011, 23:47
PM MAIL   Вверх
asmdzen
Дата 7.8.2011, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



Цитата(volatile @  6.8.2011,  23:45 Найти цитируемый пост)
Накапливать информацию где-то.

все понял, сделаю примерно так
Цитата(alexvs11 @  6.8.2011,  16:10 Найти цитируемый пост)
 логичным добавлять в буффер данные, а к нему приципить Event

только без Event'а, просто стоит обычный list, когда в нем что-то есть и прошел определенный промежуток времени я обрабатываю его содержимое.
всем спасибо.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0656 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.