|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.03.2015, 09:22 | #1 |
Форумчанин
Регистрация: 22.02.2010
Сообщений: 912
|
Процедуры в потоках и синхронизация с VCL (Lazarus)
Доброго всем! Что то запутался я... Вообщем выполняю некоторые действия с файлом, на форму в Caption вывожу текущий процент завершенности работы с файлом. Проблема показалась следующим образом: При малых файлах (30-50 кб) процесс происходит моментально... действия в файле выполняются правильно, но в Form.caption сразу 100%. При больших файлах (1,5 Гб и более) процесс видимо не работает... Form.caption висит 0%, структура файла не меняется.
Код:
Код:
Код:
|
01.03.2015, 10:50 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Ну видимо HandleWorksBegin не завершен - то ли очень долго работает, то ли вообще зациклился. И не понятен такой способ выдачи прогресса, его обычно в цикле выдают
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
01.03.2015, 18:49 | #3 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
сделай HandleWorksBegin методом треда, высчитывай внутри прогресс и вызывай Synchronize оттуда изнутри цикла при условии, что он изменился на определённую разницу.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
01.03.2015, 19:22 | #4 |
Форумчанин
Регистрация: 22.02.2010
Сообщений: 912
|
min@y™, прыгал, танцевал вокруг да около, а в итоге так и написал... а параметр HandleWorks передаю в Execute потока.
|
01.03.2015, 19:26 | #5 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
помогло ?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
01.03.2015, 21:09 | #6 |
Форумчанин
Регистрация: 22.02.2010
Сообщений: 912
|
min@y™, ну это как сказать Вопрос, поставленный в теме решен, кстати я отблагодарил вас. Но после того как переписал по этому алгоритму, решил вообще HandleWorksBegin записать внутри TWorkThread.Execute, а затем и вообще перенес весь код чисто в TWorkThread.Execute, вынося пару переменных в глобальные (т.к. они задаются единожды при работе потока.) По ощущениям работать стало все много медленнее... Сейчас вот пишу 2 версии и счетчики вешаю, для проверки скорости работы.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Синхронизация потоков и VCL | zumm | Общие вопросы Delphi | 3 | 14.08.2013 00:46 |
Прокси в потоках | admin22 | Общие вопросы Delphi | 7 | 02.01.2013 12:05 |
Перекомпиляция программы(простой) Win Lazarus в Linux Lazarus | Toxifer | Фриланс | 0 | 27.11.2012 22:46 |
Сокеты в потоках | unmazable | Общие вопросы Delphi | 0 | 12.03.2012 13:35 |
синхронизация в потоках | xrob | Общие вопросы Delphi | 8 | 15.11.2010 17:25 |