как убрать эфект подвисания программы
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



как убрать эфект подвисания программы Expand / Collapse
Автор
Сообщение
05.09.2006 10:56


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 17.09.2008 11:12
Сообщ.: 229, Visits: 1 982
есть программа которая обрабатывает текстовые файлы...

на формочке два прогрессбара и два StaticText

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

как избавиться от этого эфекта зависа?

программа в C++ Builder 6, Borland Develop.Studio C++

Заранее благодарю. 

Сообщ. #903847
05.09.2006 10:57
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Запускай обработку файлов в отдельном потоке.
Сообщ. #903849
05.09.2006 11:00


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 17.09.2008 11:12
Сообщ.: 229, Visits: 1 982
расширь плиз ответ...

я только учусь Сям...

Сообщ. #903850
05.09.2006 11:37
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Windows, как многозадачная ОС, позволяет выполнять паралельные операции внутри отдельной программы с помощью так называемых потоков (thread) или, как их еще называют, нити. По сути зто просто часть кода твоей программы. Любая программа по умолчанию всегда имеет один главный поток и может создать дополнительные по мере необходимости. В C++ Builder, если правильно помню, надо создать класс наследник от TThread и переопределить метод Execute. В нем тебе и надо разместить код обработки файлов. Подробности читай в справке C++ Builder.
Сообщ. #903855
05.09.2006 13:53
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Уточнение к предыдущему посту. Вместо "внутри отдельной программы" следует читать "внутри отдельного процесса". Так будет правильнее.
Сообщ. #903867
05.09.2006 18:00
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 10.11.2008 0:08
Сообщ.: 1 298, Visits: 12 501
:) bazile все сказал
Сообщ. #903888
05.09.2006 18:57
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 06.12.2008 11:51
Сообщ.: 66, Visits: 770
А может в циклы добавить Application->ProcessMessages()?
Сообщ. #903892
05.09.2006 19:01
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 10.11.2008 0:08
Сообщ.: 1 298, Visits: 12 501
можно, у меня даже такая ф-ция для MFC была создана
с теоретической точки зрения - это неправильный подход, с практической точки зрения - это зачастую проще и быстрее в реализации

С уважением,
Владимир
Сообщ. #903893
05.09.2006 19:15
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 06.12.2008 11:51
Сообщ.: 66, Visits: 770
Судя потому, что на форме "два прогрессбара", стоит использовать потоки. Однако в неопределенно длинных циклах надо и ProcessMessages добавлять, теоретически.
Сообщ. #903894