Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизВопрос о таймерах ! Найти похожие ветки
← →
Offceman (2006-02-07 12:54) [0]Как оно будет быстрее работать?
2-е обработки в 1-ом Таймере, при Timer1.interval:= 500;
или
1-а обработка в 1-ом таймере, при Timer1.interval:= 500;
+
1-а обработка в 1-ом таймере, при Timer1.interval:= 500;
т.е. есть ли смысл разделять различные обработки(расчёты) в отдельные таймеры или можно всё в одном крутить. Около 500 строк занимают ДВЕ обработки в одном таймере. при расчётах используются простые арифметические действия, и if ..then..begin..end
← →
Digitman © (2006-02-07 13:02) [1]первое предпочтительней ... если не по скорости, то хотя бы по меньшим ресурсам
← →
Desdechado © (2006-02-07 13:08) [2]если обе уложатся в полсекунды, иначе интересность будет
← →
Officeman (2006-02-07 13:09) [3]спасибо за совет.
примерное время выполнения этого таймера на данном этапе, составляет 0,3 секунды. кроме того обработка всего ВКЛЮЧЕНА и данные подсчитываются "на лету". может в данном случае правильнее разбить обработки на ДВЕ.
т.е. каждую запихать в отдельный таймер.
???
← →
Ega23 © (2006-02-07 13:10) [4]
> если обе уложатся в полсекунды, иначе интересность будет
Почему?
procedure TForm1.TimeOnTimer(Sender:TObject);
begin
Timer1.Enambed:=False;
// Вычисления
Timer1.Enambed:=True;
end;
← →
ZeroDivide © (2006-02-07 13:11) [5]Минимальное время срабатывания таймера - 55 миллисекунд.
← →
Digitman © (2006-02-07 13:17) [6]
> т.е. каждую запихать в отдельный таймер
При условии что оба алгоритма должны быть выполнены с одной и той же периодичностью (0,5 сек) нет никакого резона плодить таймеры - достаточно одного.
Более того, достаточно одного таймера при условии что периодичности выполнения более чем 2-х алгоритмов кратны минимальному из периодов
← →
Digitman © (2006-02-07 13:18) [7]
> т.е. каждую запихать в отдельный таймер
При условии что оба алгоритма должны быть выполнены с одной и той же периодичностью (0,5 сек) нет никакого резона плодить таймеры - достаточно одного.
Более того, достаточно одного таймера при условии что периодичности выполнения более чем 2-х алгоритмов кратны минимальному из периодов
← →
Officeman (2006-02-07 13:21) [8]примерно 1/20 чать кода - таймера.
я его ещё буду передылывать. пока незнаю как. но надо.
//form2.Caption:=inttostr(Templ);
label58.Caption:="";
calc_ii.Caption:="0";
calc2_ii.Caption:="0";
//âåùåé íà ñóììó
x0:=0;x1:=0;x2:=0;x3:=0;x4:=0;x5:=0;
x6:=0;x7:=0;x8:=0;x9:=0;x10:=0;x11:=0;
y0:=0;y1:=0;y2:=0;y3:=0;y4:=0;y5:=0;
y6:=0;y7:=0;y8:=0;y9:=0;y10:=0;y11:=0;
x0:=strtofloatDef(LVu.Items.Item[0].SubItems[5],0);
x1:=strtofloatDef(LVu.Items.Item[1].SubItems[5],0);
x2:=strtofloatDef(LVu.Items.Item[2].SubItems[5],0);
x3:=strtofloat(LVu.Items.Item[3].SubItems[5]);
x4:=strtofloat(LVu.Items.Item[4].SubItems[5]);
x5:=strtofloat(LVu.Items.Item[5].SubItems[5]);
x6:=strtofloat(LVu.Items.Item[6].SubItems[5]);
x7:=strtofloat(LVu.Items.Item[7].SubItems[5]);
x8:=strtofloat(LVu.Items.Item[8].SubItems[5]);
x9:=strtofloat(LVu.Items.Item[9].SubItems[5]);
x10:=strtofloat(LVu.Items.Item[10].SubItems[5]);
x11:=strtofloat(LVu.Items.Item[11].SubItems[5]);
label58.Caption:=floattostr(x1+x2+x3+x4+x0+x5+x6+x7+x8+x9+x10+x11)+" ñîò.";
y0:=strtofloatDef(LVu2.Items.Item[0].SubItems[5],0);
y1:=strtofloatDef(LVu2.Items.Item[1].SubItems[5],0);
y2:=strtofloatDef(LVu2.Items.Item[2].SubItems[5],0);
y3:=strtofloat(LVu2.Items.Item[3].SubItems[5]);
y4:=strtofloat(LVu2.Items.Item[4].SubItems[5]);
y5:=strtofloat(LVu2.Items.Item[5].SubItems[5]);
y6:=strtofloat(LVu2.Items.Item[6].SubItems[5]);
y7:=strtofloat(LVu2.Items.Item[7].SubItems[5]);
y8:=strtofloat(LVu2.Items.Item[8].SubItems[5]);
y9:=strtofloat(LVu2.Items.Item[9].SubItems[5]);
y10:=strtofloat(LVu2.Items.Item[10].SubItems[5]);
y11:=strtofloat(LVu2.Items.Item[11].SubItems[5]);
label56.Caption:=floattostr(y1+y2+y3+y4+y0+y5+y6+y7+y8+y9+y10+y11)+" ñîò.";
//------------------------------------------ USER 1 ----------------------
calc_sila.Caption:=inttostr(strtoint(u_sila.text)+strtoint(LVu.items.Item[0].SubItems[6])+strtoint(LVu.items.Item[1].Sub Items[6])+strtoint(LVu.items.Item[2].SubItems[6])+strtoint(LVu.items.Item[4].SubItems[6])+strtoint(LVu.items.Item[5].Sub Items[6])+strtoint(LVu.items.Item[6].SubItems[6])+strtoint(LVu.items.Item[7].SubItems[6])+strtoint(LVu.items.Item[8].Sub Items[6])+strtoint(LVu.items.Item[9].SubItems[6])+strtoint(LVu.items.Item[10].SubItems[6])+strtoint(LVu.items.Item[3].Su bItems[6])+strtoint(LVu.items.Item[11].SubItems[6])+
strtoint(LVu.items.Item[0].SubItems[31])+strtoint(LVu.items.Item[1].SubItems[31])+strtoint(LVu.items.Item[2].SubItems[31 ])+strtoint(LVu.items.Item[4].SubItems[31])+strtoint(LVu.items.Item[5].SubItems[31])+strtoint(LVu.items.Item[6].SubItems [31])+strtoint(LVu.items.Item[7].SubItems[31])+strtoint(LVu.items.Item[8].SubItems[31])+strtoint(LVu.items.Item[9].SubIt ems[31])+strtoint(LVu.items.Item[10].SubItems[31])+strtoint(LVu.items.Item[3].SubItems[31])+strtoint(LVu.items.Item[11]. SubItems[31])); //ñòàòû êàìíåé
calc_lovka.Caption:=inttostr(strtoint(u_lovka.text)+strtoint(LVu.items.Item[0].SubItems[7])+strtoint(LVu.items.Item[1].S ubItems[7])+strtoint(LVu.items.Item[2].SubItems[7])+strtoint(LVu.items.Item[4].SubItems[7])+strtoint(LVu.items.Item[5].S ubItems[7])+strtoint(LVu.items.Item[6].SubItems[7])+strtoint(LVu.items.Item[7].SubItems[7])+strtoint(LVu.items.Item[8].S ubItems[7])+strtoint(LVu.items.Item[9].SubItems[7])+strtoint(LVu.items.Item[10].SubItems[7])+strtoint(LVu.items.Item[3]. SubItems[7])+strtoint(LVu.items.Item[11].SubItems[7])+
strtoint(LVu.items.Item[0].SubItems[32])+strtoint(LVu.items.Item[1].SubItems[32])+strtoint(LVu.items.Item[2].SubItems[32 ])+strtoint(LVu.items.Item[4].SubItems[32])+strtoint(LVu.items.Item[5].SubItems[32])+strtoint(LVu.items.Item[6].SubItems [32])+strtoint(LVu.items.Item[7].SubItems[32])+strtoint(LVu.items.Item[8].SubItems[32])+strtoint(LVu.items.Item[9].SubIt ems[32])+strtoint(LVu.items.Item[10].SubItems[32])+strtoint(LVu.items.Item[3].SubItems[32])+strtoint(LVu.items.Item[11]. SubItems[32]));
....
//Ïðîâåðêà öâåòíàÿ.
if strtoint(calc_otveta.Caption)=strtoint(calc2_otveta.Caption) then begin
calc2_otveta.Font.Color:=clBlack;
calc_otveta.Font.Color:=clBlack;
end else begin
if strtoint(calc_otveta.Caption)>strtoint(calc2_otveta.Caption) then begin
calc2_otveta.Font.Color:=clRed;
calc_otveta.Font.Color:=clGreen;
end else begin
calc_otveta.Font.Color:=clRed;
calc2_otveta.Font.Color:=clGreen;
end end;
//Ïðîâåðêà öâåòíàÿ.
if strtoint(calc_krita.Caption)=strtoint(calc2_krita.Caption) then begin
calc2_krita.Font.Color:=clBlack;
calc_krita.Font.Color:=clBlack;
end else begin
if strtoint(calc_krita.Caption)>strtoint(calc2_krita.Caption) then begin
calc2_krita.Font.Color:=clRed;
calc_krita.Font.Color:=clGreen;
end else begin
calc_krita.Font.Color:=clRed;
calc2_krita.Font.Color:=clGreen;
end end;
← →
Desdechado © (2006-02-07 13:21) [9]Ega23 © (07.02.06 13:10) [4]
если нужно ЧЕТКО каждые полсекунды, то это не выход
ZeroDivide © (07.02.06 13:11) [5]
у меня было 12мс
PS качество работы зависит от загруженности системы
← →
Ega23 © (2006-02-07 13:23) [10]
> если нужно ЧЕТКО каждые полсекунды, то это не выход
Это да.
Но, с другой стороны, а кто тебе даст ЧЁТКУЮ гарантию о срабатывании РОВНО каждые полсекунды? TTimer? :о)
← →
Officeman (2006-02-07 13:26) [11]программа используется на разных тачках.
вот именно на тачках, класса Pentium I . возникают проблемы.
обишка к памяти и прочае.
← →
Digitman © (2006-02-07 13:29) [12]
> класса Pentium I . возникают проблемы.
> обишка к памяти и прочае
Да наплоди ты там хоть косой десяток таймеров - результат будет тем же !
← →
Kolan © (2006-02-07 13:29) [13]
x0:=strtofloatDef(LVu.Items.Item[0].SubItems[5],0);
А что кто-то может успеть поменятьLVu.Items.Item[0].SubItems[5],0
за пол секунды думаю нет.
Так зачем тогда ты это там храшишь. Раздели Хранение и отображение данных.
Тогда не придется делать кучу преобразований..
Мож конечно не так понял..
← →
Kolan © (2006-02-07 13:31) [14]ЗЫ
Код ужасный ничего не понятноcalc_lovka.Caption:=inttostr(strtoint(u_lovka.text)+strtoint(LVu.items.Item[0].SubItems[7])+strtoint(LVu.items.Ite m[1].S ubItems[7])+strtoint(LVu.items.Item[2].SubItems[7])+strtoint(LVu.items.Item[4].SubItems[7])+strtoint(LVu.items.Item[5].S ubItems[7])+strtoint(LVu.items.Item[6].SubItems[7])+strtoint(LVu.items.Item[7].SubItems[7])+strtoint(LVu.items.Item[8].S ubItems[7])+strtoint(LVu.items.Item[9].SubItems[7])+strtoint(LVu.items.Item[10].SubItems[7])+strtoint(LVu.items.Item[3]. SubItems[7])+strtoint(LVu.items.Item[11].SubItems[7])+
На генератор сл символов похоже
← →
evvcom © (2006-02-07 13:32) [15]Зачем же столько StrToInt и IntToStr? :o) Бедная машина!.. :) А еще циклы есть и массивы констант, например.
← →
Officeman (2006-02-07 13:35) [16]to Kolan, =( нельзя.
Программа как конструктор.
Пользователь визуально подбирает элементы(каждый имеет свои параметры), и сразу видит изменившийся результат.
сами таблички скрыты от глаз пользователя.
← →
Officeman (2006-02-07 13:37) [17]evvcom, помоги!
подскажи как можно подругому записать следующую строку: ))
calc2_sila.Caption:=inttostr(strtoint(u2_sila.text)+strtoint(LVu2.items.Item[0].SubItems[6])+strtoint(LVu2.items.Item[1] .SubItems[6])+strtoint(LVu2.items.Item[2].SubItems[6])+strtoint(LVu2.items.Item[4].SubItems[6])+strtoint(LVu2.items.Item [5].SubItems[6])+strtoint(LVu2.items.Item[6].SubItems[6])+strtoint(LVu2.items.Item[7].SubItems[6])+strtoint(LVu2.items.I tem[8].SubItems[6])+strtoint(LVu2.items.Item[9].SubItems[6])+strtoint(LVu2.items.Item[10].SubItems[6])+strtoint(LVu2.ite ms.Item[3].SubItems[6])+strtoint(LVu2.items.Item[11].SubItems[6])+
strtoint(LVu2.items.Item[0].SubItems[31])+strtoint(LVu2.items.Item[1].SubItems[31])+strtoint(LVu2.items.Item[2].SubItems [31])+strtoint(LVu2.items.Item[4].SubItems[31])+strtoint(LVu2.items.Item[5].SubItems[31])+strtoint(LVu2.items.Item[6].Su bItems[31])+strtoint(LVu2.items.Item[7].SubItems[31])+strtoint(LVu2.items.Item[8].SubItems[31])+strtoint(LVu2.items.Item [9].SubItems[31])+strtoint(LVu2.items.Item[10].SubItems[31])+strtoint(LVu2.items.Item[3].SubItems[31])+strtoint(LVu2.ite ms.Item[11].SubItems[31]));
← →
Kolan © (2006-02-07 13:38) [18]сами таблички скрыты от глаз пользователя
Те ты хочешь сказать, что ты берешь данные из ListView, делаешь кучу преобразований, и этиListView
даже пользователю НЕВИДНЫ?
Извени - бред...
← →
Kolan © (2006-02-07 13:40) [19]Опеши задачу. У тебя неверный подход к её решению...
← →
evvcom © (2006-02-07 13:45) [20]
> подскажи как можно подругому записать следующую строку:
> ))
> u2_sila.text
Есть, например, TSpinEdit. Зачем использовать TEdit и преобразовывать текст к числу, если можно выбрать другой компонент и работать непосредственно с числом?
> strtoint(LVu2.items.Item[0].SubItems[6])+
Что такое LVu2? Вероятно, тебе для данной задачи это не очень-то и подходит. Возможно, надо написать нечто свое, которое хранит числа, а не строки.
И про таймер: чем обусловлена необходимость запускать "сложный" расчет каждые полсекунды? Может здесь подойдет что-то менее ресурсоемкое?
← →
Officeman (2006-02-07 13:54) [21]to evvcom, wrote:
И про таймер: чем обусловлена необходимость запускать "сложный" расчет каждые полсекунды? Может здесь подойдет что-то менее ресурсоемкое?
Например?
← →
Digitman © (2006-02-07 13:55) [22]Вся эта абракадабра
calc_sila.Caption:=
inttostr(strtoint(u_sila.text)+
strtoint(LVu.items.Item[0].SubItems[6])+
strtoint(LVu.items.Item[1].Sub Items[6])+
strtoint(LVu.items.Item[2].SubItems[6])+
strtoint(LVu.items.Item[4].SubItems[6])+
strtoint(LVu.items.Item[5].Sub Items[6])+
strtoint(LVu.items.Item[6].SubItems[6])+
strtoint(LVu.items.Item[7].SubItems[6])+
strtoint(LVu.items.Item[8].Sub Items[6])+
strtoint(LVu.items.Item[9].SubItems[6])+
strtoint(LVu.items.Item[10].SubItems[6])+
strtoint(LVu.items.Item[3].Su bItems[6])+
strtoint(LVu.items.Item[11].SubItems[6])+
strtoint(LVu.items.Item[0].SubItems[31])+
strtoint(LVu.items.Item[1].SubItems[31])+
strtoint(LVu.items.Item[2].SubItems[31])+
strtoint(LVu.items.Item[3].SubItems[31])+
strtoint(LVu.items.Item[4].SubItems[31])+
strtoint(LVu.items.Item[5].SubItems[31])+
strtoint(LVu.items.Item[6].SubItems [31])+
strtoint(LVu.items.Item[7].SubItems[31])+
strtoint(LVu.items.Item[8].SubItems[31])+
strtoint(LVu.items.Item[9].SubIt ems[31])+
strtoint(LVu.items.Item[10].SubItems[31])+
strtoint(LVu.items.Item[11]. SubItems[31]));
сводится к примитивнейшему, до смешного протому коду :
var
Accum := 0; //Accum: Integer;
..
with LVu.items do
for I:=0 to 11 do
Accum := Accum + strtoint(Item[i].SubItems[6]) + strtoint(Item[i].SubItems[31]);
calc_sila.Caption:= IntToStr(StrToInt(u_sila.text) + Accum);
← →
Zeqfreed © (2006-02-07 13:57) [23]
> подскажи как можно подругому записать следующую строку:
> ))
Для начала — использовать with. А вообще, такой код подлежит безжалостному уничтожению.
← →
Officeman (2006-02-07 14:02) [24]to Kolan, концепция абсолютно верная. уверен на 100%.
Согласен. Реализация дерьмовая. Я никогда не работал с таким больши колличеством реквизитом.
А данные я только храню в ListView. т.е. при загрузке программы открываю текстовый файлик с разделителями. и гружу всё в ListView. потом работаю с данными из ListView (читаю, перезаписываю) и при выходе их программы снова всё сохраняю в текстовый файл в разделителями.
всё работает в принципе. конечно я согласен что я загнался с "strtofloat".
думал что код будет намного меньше. скорее всего сделаю так. буду держать все данные ячеек в виртуальных переменных. и уже в ними работать в таймере.
← →
evvcom © (2006-02-07 14:09) [25]
> Officeman (07.02.06 13:54) [21]
> to evvcom, wrote:
> И про таймер: чем обусловлена необходимость запускать "сложный"
> расчет каждые полсекунды? Может здесь подойдет что-то менее
> ресурсоемкое?
>
> Например?
Ты как тот еврей, отвечаешь вопросом на вопрос, игнорируя первую половину. Тебе также коротко ответить? Сообщения.
← →
Officeman (2006-02-07 14:09) [26]to Zeqfreed
короче =) скачайте и посмотрите. размер 1,8 метра.
http://stalkerz.onfo/primer/v0602.rar
Надо собрать чуваку комплект доспех.
Кратно описание:
1)сначало выбираете любое зелёное поле двойным щелчком мыши,
затем в списке выбираете нужный предмет.
Одевается тоже дв.щелчком мыши.
← →
Officeman (2006-02-07 14:11) [27]пс. просто вы быстро пишите. пока я сам пишу сообщения. вы уже новые добавляете. получается второе сообщение перед первым.
← →
Kolan © (2006-02-07 14:22) [28]виртуальных переменных
А это что такое?
← →
Officeman (2006-02-07 14:24) [29]to Digitman
Я попробую с помощью with или for уменьшить код.
Но невсегда сокращённый код, работает быстрее полного.
← →
Digitman © (2006-02-07 14:26) [30]
> невсегда сокращённый код, работает быстрее полного
"Быстроту" ту самую ты не там ищешь.
Ну а читать эту галиматью нет никакого желания, поверь.
← →
Officeman (2006-02-07 14:27) [31]Kolan =) это я так обозвал массив переменных. я дурак.
← →
Officeman (2006-02-07 14:29) [32]to Digitman, верю!
спасибо тебе о великий супер мега программист.
=\
← →
Digitman © (2006-02-07 14:31) [33]
> спасибо тебе о великий супер мега программист
еще "ку" не забудь))))
← →
Johnmen © (2006-02-07 14:33) [34]>Ega23 © (07.02.06 13:10) [4]
Так делать я бы не рекомендовал. Т.к. это фактически пересоздание таймера, операция небыстрая как минимум...
← →
Kolan © (2006-02-07 14:40) [35]
calc_sila.Caption:=
inttostr(strtoint(u_sila.text)+
strtoint(LVu.items.Item[0].SubItems[6])+
strtoint(LVu.items.Item[1].Sub Items[6])+
strtoint(LVu.items.Item[2].SubItems[6])+
strtoint(LVu.items.Item[4].SubItems[6])+
strtoint(LVu.items.Item[5].Sub Items[6])+
strtoint(LVu.items.Item[6].SubItems[6])+
strtoint(LVu.items.Item[7].SubItems[6])+
strtoint(LVu.items.Item[8].Sub Items[6])+
strtoint(LVu.items.Item[9].SubItems[6])+
strtoint(LVu.items.Item[10].SubItems[6])+
strtoint(LVu.items.Item[3].Su bItems[6])+
strtoint(LVu.items.Item[11].SubItems[6])+
strtoint(LVu.items.Item[0].SubItems[31])+
strtoint(LVu.items.Item[1].SubItems[31])+
strtoint(LVu.items.Item[2].SubItems[31])+
strtoint(LVu.items.Item[3].SubItems[31])+
strtoint(LVu.items.Item[4].SubItems[31])+
strtoint(LVu.items.Item[5].SubItems[31])+
strtoint(LVu.items.Item[6].SubItems [31])+
strtoint(LVu.items.Item[7].SubItems[31])+
strtoint(LVu.items.Item[8].SubItems[31])+
strtoint(LVu.items.Item[9].SubIt ems[31])+
strtoint(LVu.items.Item[10].SubItems[31])+
strtoint(LVu.items.Item[11]. SubItems[31]));
Все это можно заменитьArr: array of Integer;
for I := Low(Arr) to High(Arr) do
Summ := Summ + Arr[I];
← →
evvcom © (2006-02-07 14:41) [36]
> еще "ку" не забудь))))
А у тебя желтых штанов нет? А то 2 раза "ку" тогда надо. :)
← →
sniknik © (2006-02-07 14:41) [37]зачем вообще таймер, когда упоминалось событие... типа, что все это пересчитывается когда пользователь чтото изменил.... ???
а если ничего не менял? то, что попусту ресурсы жрать? и так убого написано чтобы еще и в таймер это вставлять.
← →
Officeman (2006-02-07 14:41) [38]ктонить из вас скачал и посмотрел прогу?
адрес выше.
← →
sniknik © (2006-02-07 14:42) [39]> ктонить из вас скачал и посмотрел прогу?
екзешник небось? иши дураков...
← →
Zeqfreed © (2006-02-07 14:42) [40]Could not locate remote server
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.045 c