![]() |
| ||
|
|
Новости |
Поиск |
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;
Германн (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.