Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.14;
Скачать: CL | DM;

Вниз

Проблема с таймером   Найти похожие ветки 

 
Numark   (2006-12-26 15:54) [0]

Привет мастера! Сначало код:
fstval := i;
realval := 0;
countt := 0;
Timer1.Enabled := True;
<...>
procedure TForm1.Timer1Timer(Sender: TObject);
begin
inc(countt);
if countt = 60 then
begin
endval := i;
realval := endval - fstval;
countt := 0;
fstval := i;
end;
end;
<...>
Label1.Caption := "Скорость: "+IntToStr(realval)+" f/m";

Смысл в том, что перед запуском таймера, в переменную fstval, заносится значение переменной i, далее, по прошествии 1 минуты, значение i, заносится в endval, и то, насколько fstval меньше endval, заносится в realval.
Так я вычисляю скорость обработки. Но проблема в том, что realval, всегда равна показателю переменной countt (счётчику в таймере).
Т.Е. результат выводится не через минуту, как мне хотелось бы, а по достижению realval 60-ти.
Подскажите в чём проблема?  Спасибо.


 
Elen ©   (2006-12-26 16:07) [1]


>  результат выводится не через минуту, как мне хотелось бы,
>  а по достижению realval 60-ти.

Что-то я не совсем пойму проблему... А Интервал таймера какой?


 
Сергей М. ©   (2006-12-26 16:08) [2]


> результат выводится не через минуту


А где в обработчике события таймера "вывод результата" ?


 
Numark   (2006-12-26 16:09) [3]

Elen ©   (26.12.06 16:07) [1]
1000


 
Elen ©   (2006-12-26 16:11) [4]


> Numark

Либо задачу поподробнее либо [2]


 
Numark   (2006-12-26 16:11) [5]

Сергей М. ©   (26.12.06 16:08) [2]

procedure TForm1.Button1Click(Sender: TObject);
begin
<...>
//определяем скорость.
fstval := i;
realval := 0;
countt := 0;
Timer1.Enabled := True;
//..................
wannarepeat:=true;
repeat
Application.ProcessMessages;
Label1.Caption := "Скорость: "+IntToStr(realval)+" f/m";
<...> //тут идёт обработка, и начисление переменной i
until wannarepeat = false;
end;


 
Elen ©   (2006-12-26 16:12) [6]


> 1000

Это не минута это 1000 миллисекунд=1 сек.


 
novill ©   (2006-12-26 16:13) [7]

Я вот с трех проходов так и не понял организации...
Почему тебе таймер на 1 минуту не выставить?

Как у тебя переменые объявлены?


 
Сергей М. ©   (2006-12-26 16:14) [8]


> Numark   (26.12.06 16:11) [5]


Еще раз спрашиваю: где в обработчике события таймера "вывод результата" ?


 
Elen ©   (2006-12-26 16:15) [9]


> Numark   (26.12.06 16:11) [5]

Ох чует мое сердце, подход не хороший... Чеб не в таймере вывод делать?


 
Ega23 ©   (2006-12-26 16:19) [10]


> Это не минута это 1000 миллисекунд=1 сек.
>


И то не факт. В смысле, что это ровно секунда будет


 
Elen ©   (2006-12-26 16:21) [11]


>  В смысле, что это ровно секунда будет

Ха. Ну так и до минуты-то далековато ;) Хотя... Энштейн... Искривление пространства и времени...


 
Ega23 ©   (2006-12-26 16:25) [12]


> Ха. Ну так и до минуты-то далековато ;) Хотя... Энштейн.
> .. Искривление пространства и времени...


Да я не о том. Поставь интервал таймера 60000 (минута) - не факт, что между тиками пройдёт ровно 60000 мс.


 
Numark   (2006-12-26 16:30) [13]

novill ©   (26.12.06 16:13) [7]
> Почему тебе таймер на 1 минуту не выставить?

Сделал так, вроде заработало, хотя это не совсем приемлемо, т.к. в label1 по ходу работы, скорее всего, будет необходимо добавить вывод и д.р. результатов, со скоростью вывода менее 1 минуты.

> Elen ©   (26.12.06 16:15) [9]
Ну, как я уже выше написал, в таймере, скорее всего, будет необходимо добавить вывод результатов, со скоростью обновления менее 1-ой минуты.

> Сергей М. ©   (26.12.06 16:14) [8]
В таймере не выводятся результаты, а там всего лишь они подсчитывается.
Результат выводится в цикле button1.


 
Elen ©   (2006-12-26 16:56) [14]


> Результат выводится в цикле button1.

Чепуха какая-то. Смотри ты себе такие подводные камни наживеш с этой идеей...


 
Numark   (2006-12-26 17:10) [15]

> Elen ©   (26.12.06 16:56) [14]
Ну можно и так:

<...>
//определяем скорость.
fstval := i;
realval := 0;
countt := 0;
Timer1.Enabled := True;
//................................
wannarepeat:=true;
repeat
Application.ProcessMessages;
//тут идёт обработка, и начисление переменной i
until wannarepeat = false;
<...>
procedure TForm1.Timer1Timer(Sender: TObject);
begin
inc(countt);
if countt = 60 then
begin
endval := i;
realval := endval - fstval;
countt := 0;
fstval := i;
end
else
Label1.Caption := "Скорость: "+IntToStr(realval)+" f/m";
end;
//interval = 1000

Но всё равно проблема осталась. realval всегда показывает 60.


 
Numark   (2006-12-26 17:11) [16]

P.S. все переменные - глобальные =)


 
icWasya ©   (2006-12-26 18:11) [17]

сделай так
var
 fstval , endval , realval : Double;

 fstval:= Now * 86400;

.... Timer1Timer(...
begin
...
endval := Now * 86400;

realval := endval - fstval;
...
end;

Label1.Caption := "Скорость: "+FloatToStr(realval)+" f/m";


 
Elen ©   (2006-12-27 07:49) [18]


> Но всё равно проблема осталась. realval всегда показывает
> 60.

Так может это и есть правильный результат? Я когда своими средствами из инета музон качаю у меня тоже скорость показывается одна и та же, хотя Опера скорость меняет.



Страницы: 1 вся ветка

Текущий архив: 2007.01.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.045 c
15-1166818691
Petr V. Abramov
2006-12-22 23:18
2007.01.14
теория очередей


3-1161691807
zdm
2006-10-24 16:10
2007.01.14
api for propath


1-1164122172
misha_gr
2006-11-21 18:16
2007.01.14
Как получить путь к папке %UserProfile%


1-1164296458
DelphiLexx
2006-11-23 18:40
2007.01.14
Delphi 2006 и TFlowPanel, TGridPanel


2-1166930197
allrussia
2006-12-24 06:16
2007.01.14
Помогите разобраться с TThread