![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли создать событие на изменение переменной? [D7]
Ingwar © (2006-10-27 00:41:00)Сейчас пока сделал поток, который следит за изменением переменной... Только эта зараза жрет все ресурсы процессора. Может возможно сделать это как-нить по другому?
procedure ThreadDemo.Execute;
begin
repeat
if (Head<>Read) then
begin
Synchronize(Update);
end;
until False
end;
Anatoly Podgoretsky (2006-10-27 01:09:00) [21]
> Но там не написано, что при использовании Syncronize многопоточность
> не работает
Но здесь оно правильно применено, только для обновления, а не для выполнения работы в главном потоке.
DrPass (2006-10-27 01:09:00) [22]
> Ketmar © (27.10.06 01:07) [10]
Остальные обычно хотят тебя убить
Gero (2006-10-27 01:08:00) [23]> [10] Ketmar © (27.10.06 01:07)
Растет.
Anatoly Podgoretsky (2006-10-27 01:08:00) [24]Если свойство, то ничего отлавливать не надо, оно само себя поймает и может оповестить заинтересованых лиц.
Ketmar (2006-10-27 01:07:00) [25]>[8] Ingwar(c) 27-Oct-2006, 01:05
>ТО Ketmar: Ты как всегда рулишь... Коротко и ясно =)
ты, кажется, первый, кто так считает из начинающих. %-)
DrPass (2006-10-27 01:07:00) [26]
> В той доке которую я читал про поток написано, что отображение
> на форму надо делать через Synchonize
Правильно написано. Но там не написано, что при использовании Syncronize многопоточность не работает, и его всячески нужно избегать, применяя только при крайней необходимости. Если нужно что-то сказать главной форме, лучше брось ей сообщение через SendMessage.
Ingwar (2006-10-27 01:05:00) [27]ТО Ketmar: Ты как всегда рулишь... Коротко и ясно =)
Ingwar (2006-10-27 01:01:00) [28]То MetalFan_pda: Завершится легко... При завершении приложения.
Так уже второй человек говорит про свойство... Пойду капать в эту сторону... Но если будут более конкретные подсказки (с фрагментом кода) я не обижусь =)
Ketmar (2006-10-27 00:59:00) [29]>[0] Ingwar(c) 27-Oct-2006, 00:41
читай про CreateEvent(), PulseEvent(), WaitForSingleObject(). вместе с изменением переменной дёргай event. в потоке -- WaitForSingleObject(). жрать ресурсы перестанет.
(это развёрнутое изложение [1] %-)
Gero (2006-10-27 00:59:00) [30]Переменную кто меняет? Ты? Тогда ты и так знаешь, когда она меняется, ничего отслеживать не нужно.
Ingwar (2006-10-27 00:58:00) [31]То DrPass: В той доке которую я читал про поток написано, что отображение на форму надо делать через Synchonize... А у меня как раз обновление формы по при приходу данных... А Head и Read это указатели на кольцевой буфер.
То Leonid Troyanovsky: А можно чуть поподробней? А то я никогда не сталкивался с подобным...
Заранее благодарен за любые посказки!
MetalFan_pda (2006-10-27 00:55:00) [32]а как поток завершится,если в н6м безусловный бесконечный цикл??ужас!
а если проперти сделать,с отслеживанием ее изменения вроде проблемы быть не должно...
Leonid Troyanovsky (2006-10-27 00:52:00) [33]
> Ingwar © (27.10.06 00:41)
> Сейчас пока сделал поток, который следит за изменением переменной.
Сделай лучше свойство (property), скажем, у формы.
--
Regards, LVT.
DrPass (2006-10-27 00:49:00) [34]Переделать логику таким образом, чтобы не было Synchonize, и еще добавить в цикл sleep(<сколько можно>)