![]() |
|
Модераторы: bsa |
![]()
|
|
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
есть поток который качает файл из инета, при поступлении очередного блока данных хочу послать сообщение окну отрисовывающему состояние файла на данный момент об этом событии, т.е. пришли данные с такого-то смещения с такой-то длинной. интересует пропускная способность обработки сообщений. (файлов могут быть и больше)
заранее благодарен. Добавлено через 14 минут и 35 секунд или просто если взять паттерн observer и посылать сообщения типа update всем observer'ам через системные сообщения (т.е. обсерверы это элементы окна), каковым будет самый короткий интервал между этими сообщениями если предположить что конечный объект сразу обрабатывает эти сообщения? |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Посылайте асинхронные сообщения.
т.е в винде например не SendMessage (), а PostMessage (); Они отрабатывают моментально. Тем самым поток считывающий файл, не будет зависеть от скорости отрисовки. И еще для повышения эффективности, в потоке который отрисовывает, можно сделать фильтрацию, и обрабатывать сообщения не чаще определенного интервала. Потому как нет смысла отрисовывать с высокой частотой (5000 раз в сек. например) Нужно выставить разумную верхнюю частоту, 2-10 раз в секунду. Того же самого можно добиться посылая сообщения не по приходу блока, а просто по таймеру. |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
ну это и так понятно ) хотя я работаю с wxwidgets AddPendingEvent() предположим я с такой скоростью посылаю сообщения, если интерфейс затормозит на секунду, они не пропадут? там нет ограничения на количество ожидающих сообщений? но тогда что именно я буду посылать? ведь за один раз я могу послать только один блок, или мне их склеивать и добавлять в контейнер а по таймеру уже посылать контейнер? можно и так попробовать ) раньше у меня интерфейс по таймеру обращался напрямую к структуре файла и читал эти блоки, но это добавляет всякие lock'и и все такое, в общем вроде получается удобней через сообщения работать. |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Если сообщения поступают чаще чем поток может их обработать, то ничего хорошего не будет.
Для этого даже не нужно знать внутреннее устройство системы. Понятно, что либо система обрежет очередь, либо память забьется до предела. Нет ? |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
вообще посылать сообщения чаще чем 4 раза в сек не имеет смысла
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
а надеюсь сообщения используются не для передачи данных?
мне кажется логичным добавлять в буффер данные, а к нему приципить Event GUI поток делает WaitForSingleObject на Event, меняет состояние, делает таймаут, снова ждет и так далее |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
это почему же? или так принято ) 4 раза в секунду не так уж и часто, невооруженным взглядом видно торможение именно так
не совсем понятно что происходит. т.е. типа семафор какой-то, включаю его когда есть новые данные, GUI их забирает. Но если таких буферов неопределенное количество? |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
патамушта, смысла делать чаще нету, ибо реакция обновления будет происходит довольно таки быстро. Ты хотя бы попробуй постучать пальцем по столу, ударить 4 раза за 1 сек, если сможешь то я поменяю свою позицию.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
Dem_max, я извиняюсь, наверное не правильно выразил смысл задания.
представь utorrent, на вкладке "Общие" есть две полоски "Загружено", "Доступно", у меня должна получится такая полоска, если блоки в этой полоске будут появляться чаще 4 в секунду это будет заметно, да я согласен, для какого-то счетчика бессмысленно обновление с такой скоростью, но у меня не какой-то номер ) |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
asmdzen, здесь, нужно отделить котлеты от мух.
Нужно отделить отрисовку окна, от приема информативных сообщений. Т.е сообщения нужно обрабатывать быстро. Накапливать информацию где-то. А вот отрисовку производить с определенной частотой, какую выберете сами. Но в любом случае не выше кадровой развертки. Это сообщение отредактировал(а) volatile - 6.8.2011, 23:47 |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
все понял, сделаю примерно так только без Event'а, просто стоит обычный list, когда в нем что-то есть и прошел определенный промежуток времени я обрабатываю его содержимое. всем спасибо. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |