![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с таймером [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-ти.
Что-то я не совсем пойму проблему... А Интервал таймера какой?