Текущий архив: 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.49 MB
Время: 0.011 c