Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли создать событие на изменение переменной? [D7]


Страницы:   1 2

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(<сколько можно>)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо