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

Вниз

Вопрос о таймерах !   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.059 c
15-1139185823
DimonS
2006-02-06 03:30
2006.02.26
Тут такой вопросец наметился насчет выбора принтера...


15-1139262214
Knight
2006-02-07 00:43
2006.02.26
Какой-то фонд "Юкос" предлагает постоить...


15-1139307906
ISP
2006-02-07 13:25
2006.02.26
И это радует...


15-1138867273
Незарегестрированный аноним
2006-02-02 11:01
2006.02.26
Жерар Депардье в роли Тараса Бульбы


15-1138691720
ANB
2006-01-31 10:15
2006.02.26
Трехслойка vs Двухслойка