Опять потоки

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Опять потоки

Сообщение VirtUX » 18.03.2010 10:56:57

Дабы не создавать новую тему решил спросить здесь.
В Lazarus 0.9.29 не могу найти критические секции. Модуль cobjects (вродеб так он назывался) отсутствует. Где теперь их искать?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Опять потоки

Сообщение eevee » 18.03.2010 11:37:49

можно попробовать так:
1. добавить к проекту глобальные переменные.
2. методом synchronize обновлять глобальные переменные (ну взять числовую переменную и присваивать ей значения от 1 до 100)
3. по таймеру в VCL проверять значение глобальной переменной и относительно ее уже выводить инфу о процентах закачки файла (ну или что там надо)

то есть не работать напрямую с VCL из synchronize
eevee
новенький
 
Сообщения: 63
Зарегистрирован: 29.12.2009 17:52:44
Откуда: Саратов

Re: Опять потоки

Сообщение Vadim » 18.03.2010 11:38:15

ronin
А Вы прогресс-бар создайте в том же потоке, где идёт закачка... ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Опять потоки

Сообщение VirtUX » 18.03.2010 11:43:20

VirtUX писал(а):Где теперь их искать?

Уже нашел - LCLType
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Опять потоки

Сообщение yser » 18.03.2010 11:59:47

ronin писал(а):Synchronize использую для отображения прогресса закачки (обращение к VCL), и вывода сообщений пользователю об этапах выполнения загрузки - коннект/загрузка/окончание/ошибки...

можно обойтись без synchronize? в принципе у меня один поток закачки

P.S. во всех источниках что прочитал пугали о синхронизации, о возможности появления ошибок при одновременном обращении к VCL


у себя делал так:
1. в потоке с каждым скаченным блоком отправлял сообщение в окно (используя postmessage) чтобы оно обновило например прогрес бар
2. а окно собственно (обрабатывая сообщение) смотрело жив ли поток и если да, то обновляло прогрес бар свежими значениями

при этом не потребовалось synchronize и критические секции.
yser
новенький
 
Сообщения: 29
Зарегистрирован: 06.02.2008 11:27:40

Re: Опять потоки

Сообщение coyot.rush » 18.03.2010 12:10:42

eevee 18.03.2010 12:37:49
можно попробовать так:
1. добавить к проекту глобальные переменные.
2. методом synchronize обновлять глобальные переменные (ну взять числовую переменную и присваивать ей значения от 1 до 100)
3. по таймеру в VCL проверять значение глобальной переменной и относительно ее уже выводить инфу о процентах закачки файла (ну или что там надо)

то есть не работать напрямую с VCL из synchronize

+1
На одно ядерных системах можно без synchronize. Потому как или mov eax,some_var[ss] или mov some_var[ss],eax третьего не дано. Плюс для больших вычислительных задач прирост в производительности. С многоядерными не знаю как обстоят дела. Имхо, в многоядерных процессорах с разделяемым L1 кэшем возможны проблемы :(
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Опять потоки

Сообщение ronin » 18.03.2010 17:04:07

спасибо за рекомендации, ну я так и сделал, через переменные

P.S. так и не могу понять почему такие трудности при работе с потоками? почему не доведут всё до ума? или так и должно быть?
ronin
постоялец
 
Сообщения: 174
Зарегистрирован: 27.01.2010 00:14:46

Re: Опять потоки

Сообщение and » 18.03.2010 21:45:44

Sergei I. Gorelkin писал(а):Ну хотя бы так.
Код потерялся?
Предполагаю, имелось в виду заменить
Synchronize(VCLMethod)
на
if not terminated
then Synchronize(VCLMethod)
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

Рейтинг@Mail.ru