![]() |
|
|
![]()
|
|
| Alexey91 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
Здравствуйте!!
Запускаю функцию LoadFromFile, если файл очень большой, то соответственно функция выполняться будет долго. Можно ли как-то во время выполнения функции проявлять активность на форме (выдавать сообщения, изменять позицию прогресс-бара и.т.д.) Понимаю, что можно сделать свое считывание из файла, но мне интересен этот способ Раньше работал с досовскими прерываниями, но здесь не знаю как делать, а компонент TTimer не прерывает процесс) |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 11 Всего: 18 |
Можно. Вкидайте ваш LoadFromFile в отдельный поток и работайте с формой спокойно. |
|||
|
||||
| Alexey91 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
SVN74, можно подробнее про отдельный поток)
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
Alexey91, ты не сможешь получать от LoadFromFile уведомления о прогрессе.
если же создать отдельный поток, и запустить LoadFromFile в нём, то интерфейс тормозить не будет, но и информации о ходе загрузки ты не получишь. Мало того, если эта LoadFromFile вызывается не у простого TStringList, а у какого-нибудь TMemo (memo->Lines->LoadFromFile( ... )), то в потоке этого делать категорически нельзя. Лучший вариант - это написать свою такую функцию, которая бы сообщала о ходе загрузки, и вызвать её в отдельном потоке -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Alexey91 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
А можно какой-нибудь кусочек кода, который демонстирует запихивание в потоки? |
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
Создаёшь класс, наследованный от TThread и реализуешь ф-цию Execute
потом создаёшь экземпляр этого класса и стартуешь поток
а вообще-то см. документацию по TThread. Там всё расписано -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| Alexey91 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
borisbn
Рано я радовался))
Файл содержащий функции по работе с потоком (^)
Как происходит работа (первые строчки) (^) Проблема в том, что во время загрузки активности на форме никакой нет, и функция во время работы showSomething выполнятся только один раз объект TMyThread создается таким образом TMyThread *T=new TMyThread(true); Это сообщение отредактировал(а) Alexey91 - 7.6.2011, 10:49 |
||||
|
|||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
ессно. ты не распараллелил загрузку из файла и поток, т.к. ф-ция showSomething вызывается в интерфейсном потоке (из-за Synchronize) и по другому - никак нельзя. тебе нужно
под этим я понимал, что ты сам будешь читать из файла, а не при помощи ф-ции LoadFromFile должно быть что-то типа такого
Это сообщение отредактировал(а) borisbn - 7.6.2011, 11:00 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| Alexey91 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
Тогда мне проще вообще потоки не использовать
Проще в цикле считать файл, сделать прогресс бар и все будет хорошо Хорошо, тогда буду доделывать так)) Мне вот непонятно, если функция вызывается в интерфейсном потоке почему нельзя использовать LoadFromFile? и не понимаю почему не распараллелил Если долго объяснить, кинь пожалйста еще инфы для ознакомления) |
|||
|
||||
| Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
Все равно твоя функция будет блокировать основной поток.
Потому что может вылезти ошибка и твое приложение закроется. Не ленись. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 25 Всего: 50 |
Используй ::PostMessage из потока (http://forum.vingrad.ru/forum/topic-60076.html) |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 18 Всего: 135 |
можно сделать и без потока, но в цикле после каждой итерации (считывания одной строки) нужно вызывать
а ф-цию LoadFromFile тебе никак не перехитрить. забудь про неё. пиши свою. она ж простая как пять копеек -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| Alexey91 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
Как все начиналось, мне было просто лень писать свою считывания файла)) И у меня возникла мысль в голове "возьму-ка я напишу на форум вопрос, а мне
что-нибудь подскажут такое простенькое". В результате это вылилось в целую трагедию Залепал statusbar |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |