Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CExFileDialog, приложение залипает  
:(
    Опции темы
mrgloom
Дата 17.6.2011, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



при использовании CExFileDialog и открытии файла который долго парсится приложение "залипает" и диалог стоит открытый, а хотелось бы сделать так чтобы приложение пусть даже и замирало,но диалог закрывался и был прогресс бар загрузки. 
PM MAIL   Вверх
Earnest
Дата 20.6.2011, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



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


--------------------
...
PM   Вверх
RastaDja
Дата 21.6.2011, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Earnest @  20.6.2011,  08:38 Найти цитируемый пост)
Логичнее всего читать файл в потоке, функция чтения должна после каждого блока (строки или чего там читается) сообщать свой прогресс.

Такие танцы занимают много времени (именно вычисление процентов загрузки). Лучше прогрессбар без процентов - просто бегущая строка (если это не условие разработки).


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Earnest
Дата 21.6.2011, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



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



--------------------
...
PM   Вверх
RastaDja
Дата 22.6.2011, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Earnest @  21.6.2011,  17:26 Найти цитируемый пост)
А чего вдруг она бежать будет, если ты ей текущий процент не скажешь

все зависит от прогрессбара, не знаю есть ли в MFC такой (не проверял). В своё время делал подобную вещь на .net, там в прогрессбара было свойство (не помню какое), в котором можно было указать - отображать бегущую строку вместо процентов загрузки.


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Earnest
Дата 22.6.2011, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



В MFC такого нет, насколько я знаю. Это ведь просто обертка над системным контролом.
Но не уверена, возможно, в новых Виндусах и докрутили.
С другой стороны, это элементарно сделать: на идл или на таймер вешаешь обработчик, который инкрементирует текущую позицию (если я правильно поняла, ты имеешь в виду полоску, которая просто по кругу бегает несколько раз).
Однако с третьей стороны, толку от такого прогресс-бара никакого. Ровно то же показывают просто песочные часы: типа процесс идет, а сколько еще ждать - хз. А может все давно зависло. Так что я все же напряглась бы и сделала нормальный подсчет прогресса, тем более что это нетрудно. Даже если процесс обрабатывает данные не поступательно (т.е. может возвращаться к данным по несколько раз), можно примерно прикинуть таки прогресс. А уж в поступательном процессе - вообще нет проблем.



--------------------
...
PM   Вверх
RastaDja
Дата 22.6.2011, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Earnest @  22.6.2011,  09:41 Найти цитируемый пост)
Так что я все же напряглась бы и сделала нормальный подсчет прогресса, тем более что это нетрудно.

Все зависит от того как Вы грузите файл, и что это за файл. Например, у Вас xml файл который грузится через какой-то объект, и допустим этот объект может лишь сообщить об окончании загрузки, либо вообще никак не сообщить (в лучшем случае вернет true из метода load). Как тут прикручивать прогресс...? Метод подсчета размера, это действует для текстовых файлов, или файлов известного зарание формата (в том случае если вы парсите его в ручную).

Это сообщение отредактировал(а) RastaDja - 22.6.2011, 09:55


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Earnest
Дата 22.6.2011, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



С этим не поспоришь. Я предполагала, что либо ты читаешь сам, либо есть возможность влезть в тот код, который читает.
Но парсеров xml гораздо больше одного. Я уж не говорю о том, что исходного кода тоже достаточно, и ничего сверх-сложного там нет. 
Раз твой объект не позволяет получить нужную информацию, то либо он подходит только для чтения малых файлов, либо ты чего-то не нашел.
Если уверен в своем диагнозе (не имеет нужных точек входа), то решение очевидно: меняй парсер.


--------------------
...
PM   Вверх
RastaDja
Дата 22.6.2011, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Earnest @  22.6.2011,  11:08 Найти цитируемый пост)
Но парсеров xml гораздо больше одного. Я уж не говорю о том, что исходного кода тоже достаточно, и ничего сверх-сложного там нет. 

Это действительно так. Но есть случаи - у меня такой был - когда используется не парсер, а объект, который умеет сериализовать себя в xml. И данных он хранил достаточно много (он хранил таблицу). Лезть в код объекта... (это, к тому же dll) имхо не нужно.
   Но всеже у вас хорошие аргументы, поэтому плюсую + smile 


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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