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

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

Проблема с таймером [D7, XP]


Numark ©   (2006-12-26 15:54:00) 

Привет мастера! Сначало код:
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-27 07:49:00) [1]


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

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


icWasya   (2006-12-26 18:11:00) [2]

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

 fstval:= Now * 86400;

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

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

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


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

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


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

> 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.


Elen   (2006-12-26 16:56:00) [5]


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

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


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

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.


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


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


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


Elen   (2006-12-26 16:21:00) [8]


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

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


Ega23   (2006-12-26 16:19:00) [9]


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


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


Elen   (2006-12-26 16:15:00) [10]


> Numark   (26.12.06 16:11) [5]

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


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


> Numark   (26.12.06 16:11) [5]


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


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

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

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


Elen   (2006-12-26 16:12:00) [13]


> 1000

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


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

Сергей М. ©   (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:11:00) [15]


> Numark

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


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

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


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


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


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


Elen   (2006-12-26 16:07:00) [18]


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

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


Наверх

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