Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
6-1124059770
Delphi_is_cool
2005-08-15 02:49
2006.02.26
winsock - авторизация


4-1133978876
swan
2005-12-07 21:07
2006.02.26
Робота с Com-портом.ВАЖНО!


15-1139141441
alexsis
2006-02-05 15:10
2006.02.26
Пара вопросов имеется


15-1139056312
ZbarKiy
2006-02-04 15:31
2006.02.26
Исходники архиваторов?


15-1138946494
Ega23
2006-02-03 09:01
2006.02.26
С Днём рождения! 3 февраля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский