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;


Германн   (2006-10-27 02:35:00) [1]


> Ingwar ©   (27.10.06 02:22) [32]
>
> Ketmar, вот ты такой умный. Не подскажешь ли как можно узнать
> сколько по времени выполняется фрагмент кода?
>

GetTickCount поможет ОРД.


Ketmar   (2006-10-27 02:33:00) [2]

>[32] Ingwar(c) 27-Oct-2006, 02:22
>Ketmar, вот ты такой умный.
это тебе кто-то наврал.

>узнать сколько по времени выполняется фрагмент кода?
GetTickCount() до и после. или QueryPerformanceCounter() для более точного измерения. но всё равно latency будет -- винда многозадачная.

есть и другие методы, но я описывать не стану. рано ещё. %-)


Ingwar   (2006-10-27 02:22:00) [3]

Ketmar, вот ты такой умный. Не подскажешь ли как можно узнать сколько по времени выполняется фрагмент кода?


Ketmar   (2006-10-27 01:56:00) [4]

>[30] Ingwar(c) 27-Oct-2006, 01:52
>Пинать не есть хорошо...
зато действенно. или полетит, или лопнет. лопнет -- фиг с ним, не повезло. возьмём следующего. %-)

если подумать: зачем нам конкуренты из молодёжи? %-)


Ingwar   (2006-10-27 01:52:00) [5]

Пинать не есть хорошо... А вот направлять это более правильный подход. Если человека направить в нужную сторону, то он либо поймет, либо этот человек потерян для общества... Я обычно так проверяю =)
Единственная загвоздка при таком подходе правильно определить исходный уровень юнита, чтобы не дать ему сверхнепосильную задачу с которой он явно не справится.


Ketmar   (2006-10-27 01:50:00) [6]

>[27] Ingwar(c) 27-Oct-2006, 01:47
ох... когда ты пишешь Synchronize(Update), то оно ждёт окончания Update. или любого другого метода, который ты передаёшь Synchronize(). натурально, если ты в теле метода делаешь код из [27], например, то поток ждёт в это время. проще говоря: рассматривай Synchronize(xxx) как вызов процедуры xxx(). пока эта процедура не отработает, поток выполняться не будет.


Ingwar   (2006-10-27 01:47:00) [7]

[25] Имелось ввиду обновления любых данных на форме, например:
Label1.Caption := 'Чего-то там';
и т.д. Просто в моих доках про ничего толком про Syncronize не написано, кроме того что его надо использовать при выводе данных на форму. А тут я узнаю, что при Syncronize многопоточность "умирает". Вот и хотелось бы узнать эти вещи связаны как-то между собой или нет.


Ketmar   (2006-10-27 01:47:00) [8]

>[26] Ingwar(c) 27-Oct-2006, 01:42
всё интересное есть в MSDN. %-) в принципе, вполне достаточно, чтобы разобраться. коли ты привык "методом тыка", то особых сложностей быть не должно. главное -- читай внимательно.

а вообще -- сначала полезно почитать что-то по винде "в общем". и уровнем пониже Delphi. того же Петзольда, например. потом Фэнь Яня, Рихтера... потом придёшь сюда и будешь весело пинать новичков -- как мы. %-)


Ingwar   (2006-10-27 01:42:00) [9]

То Ketmar: Ты прав... не учил... Я учусь на чужих исходниках разбираясь как оно работает, так повелось еще со спектрума...

И еще к тебе вопрос: Не посоветуешь где подробнее прочесть про CreateEvent... Просто я нашел всего один примерчик "отложенной операции чтения". А по Ф1 в D7 ничего не ищется =(


Ketmar   (2006-10-27 01:40:00) [10]

>[24] Ingwar(c) 27-Oct-2006, 01:35
>Текс... А про PostMessage мона тоже немного просвятить?
оно тебе надо сейчас? осмысли пока то, что есть. %-)

>И еще, если я правильно понял, что создание свойства
>позволяет избавится от потока. Или нет?
в этом твоём конкретном случае -- да.

>И еще возник вопрос. Тут сказали что при Syncronize не
>работает многопоточность. А работает ли многопоточность
>при обновлении данных на форме?
а точнее? что есть "обновление данных на форме"?


Ingwar   (2006-10-27 01:35:00) [11]

Текс... А про PostMessage мона тоже немного просвятить?
И еще, если я правильно понял, что создание свойства позволяет избавится от потока. Или нет?

И еще возник вопрос. Тут сказали что при Syncronize не работает многопоточность. А работает ли многопоточность при обновлении данных на форме? Просто у меня толи доки не полные, толи я немного запутался.


Ketmar   (2006-10-27 01:25:00) [12]

>[22] Ingwar(c) 27-Oct-2006, 01:22
>Первый раз вижу такую конструкцию...
это потому, что язык не учил. %-)


Ingwar   (2006-10-27 01:22:00) [13]

Спасибо за [15]! Первый раз вижу такую конструкцию... Сча буду разбирать как работает =)
Похоже спать мне сегодня не придется... стока всего инетерсного узнал!


Ketmar   (2006-10-27 01:20:00) [14]

>[19] DrPass(c) 27-Oct-2006, 01:14
зато автор по ходу дела имеет шанс научиться работать с потоками и событиями. тоже полезно. а потом хлопнет себя по лбу, сделает свойство, и навсегда запомнит, как не надо решать проблемы. %-)


DrPass   (2006-10-27 01:17:00) [15]


> ты имел в виду PostMessage(), правда? %-)

Я бы хотел иметь в виду PostMessage, но раз я уже написал SendMessage, автору теперь придется мучиться с зависанием приложения...


DrPass   (2006-10-27 01:14:00) [16]


> Но здесь оно правильно применено, только для обновления,
>  а не для выполнения работы в главном потоке.

Сложно сказать... в данном потоке выполняется две крохотные инструкции сравнения 0.001% его времени работы и оставшиеся 99.999% - эта самая процедура переключения контекстов. Архангельский уснул бы удовлетворенным


Ketmar   (2006-10-27 01:13:00) [17]

>[16] Ingwar(c) 27-Oct-2006, 01:12
см. [15]


Ketmar   (2006-10-27 01:12:00) [18]

>[9] DrPass(c) 27-Oct-2006, 01:07
>лучше брось ей сообщение через SendMessage.
ты имел в виду PostMessage(), правда? %-)

>[13] DrPass(c) 27-Oct-2006, 01:09
>Остальные обычно хотят тебя убить
это ничего. обожаю негатив -- я ним питаюсь.

>[14] Anatoly Podgoretsky(c) 27-Oct-2006, 01:09
>Но здесь оно правильно применено, только для обновления, а
>не для выполнения работы в главном потоке.
и всё равно можно сделать PostMessage(). %-)


Ingwar   (2006-10-27 01:12:00) [19]

То Anatoly Podgoretsky: А со свойством как? Просто инетерсно... Мона примерчик или ссылку на литературу. Буду очень признателен =)


Leonid Troyanovsky   (2006-10-27 01:10:00) [20]


> Ingwar ©   (27.10.06 00:58) [4]


type
 TForm1 = class(TForm)
   ..
 private
   { Private declarations }
   FX: Longint;
   procedure SetX(const Value: Longint); virtual;
 public
   { Public declarations }
   property X: Longint read FX write SetX;
 end;

procedure TForm1.SetX;
begin
 if Value <> FX then
   begin
     FX := Value;
     ShowMessage(IntToStr(FX)); // побочный эффект
   end;
end;

Т.е., при назначениях x := .. будет вызываться ShowMessage

--
Regards, LVT.


Страницы:   1 2

Наверх

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