Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скорость работы программы во время выполнения цикла [D6, WinXP]


Страницы:   1 2 3

ТехникПТО ©   (2005-03-03 19:40:00) 

У меян в программе выполняеться большой цикл... и во время его выполнения.. программа "подвисает"... можно ли этого избежать??? чтобы не происходило подвисание программы...


Anatoly Podgoretsky   (2005-03-03 20:40:00) [41]

Убрать как врага народа или возбуждать там специфическое исключение.
Немного офтопика, меня терзает любопытство. Что такое ПТУ я знаю, а что такое ПТО?


ТехникПТО   (2005-03-03 20:38:00) [42]


> Anatoly Podgoretsky

а что с except end; делать??


Anatoly Podgoretsky   (2005-03-03 20:32:00) [43]

Отказаться от POS внутри цикла, ты его вызываешь бесчисленное множество раз и каждый раз оно находит одно и тоже вложение.


ТехникПТО   (2005-03-03 20:32:00) [44]


> А вот как понимать этл
> except
> end;
> Верной дорогой идете товарищи, только это путь на кладбище

а как нужно праввильно?


ТехникПТО   (2005-03-03 20:29:00) [45]


> Application.MessageProcesses замедлит выполнение любого
> цикла, даже если он будет выполнен только один раз.
> Его назначение не ускорять, а позволить обработать обработку
> поступивших сообщений. Сам Application.MessageProcesses
> в состоянии выполниться несколько миллионов раз в секунду,
> проверено полевыми измерениями.

а как нибудь можно УСКОРИТЬ выполнение цикла?


Anatoly Podgoretsky   (2005-03-03 20:27:00) [46]

ТехникПТО ©   (03.03.05 20:09) [10]

Сам Application.ProcessMessages вставлен правильно, только я предпочитаю в конце цикла, что бы изменения пришли в действие.
А вот как понимать этл
except
end;

Верной дорогой идете товарищи, только это путь на кладбище.


Anatoly Podgoretsky   (2005-03-03 20:24:00) [47]

ТехникПТО ©   (03.03.05 20:07) [9]
Application.MessageProcesses замедлит выполнение любого цикла, даже если он будет выполнен только один раз.
Его назначение не ускорять, а позволить обработать обработку поступивших сообщений. Сам Application.MessageProcesses в состоянии выполниться несколько миллионов раз в секунду, проверено полевыми измерениями.


TUser   (2005-03-03 20:20:00) [48]


>  for i := 0 to Doc.All.Length - 1 do
>  begin
>  Application.ProcessMessages;

if i mod 100 = 0 then
 Application.ProcessMessages;


ТехникПТО   (2005-03-03 20:09:00) [49]


> Так ведь цикла твоего никто в глаза не видел.


procedure TForm1.SearchAndHighlightText(aText: string);
var
 i: Integer;
doc:OleVariant;
begin
If Form8.CheckBox11.Checked=True then begin
try
doc:=Form1.EmbeddedWB1.oleobject.document.frames.item(2).document;
 for i := 0 to Doc.All.Length - 1 do
 begin
 Application.ProcessMessages;
   if (Pos(aText, Doc.All.Item(i).InnerText)<>0)
    and (length(Doc.All.Item(i).InnerText)=length(aText)) then
  begin
If Form8.checkBox1.Checked=true then Doc.All.Item(i).Style.BackGroundColor:=Form8.Edit1.Text;
If Form8.checkBox6.Checked=true then Doc.All.Item(i).Style.Color:=Form8.Edit2.Text;
exit;
   end;
 end;
except
end;
end;

If Form8.CheckBox13.Checked=True then begin
try
doc:=Form1.EmbeddedWB1.oleobject.document.frames.item(2).document;
 for i := 0 to Doc.All.Length - 1 do
 begin
 Application.ProcessMessages;
   if (Pos(aText, Doc.All.Item(i).InnerText)<>0)
    and (length(Doc.All.Item(i).InnerText)=length(aText)) then
  begin
If Form8.checkBox2.Checked=true then Doc.All.Item(i).Style.BackGroundColor:=Form8.Edit1.Text;
If Form8.checkBox8.Checked=true then Doc.All.Item(i).Style.Color:=Form8.Edit2.Text;
exit;
   end;
 end;
except
end;
end;

If Form8.CheckBox12.Checked=True then begin
try
doc:=Form1.EmbeddedWB1.oleobject.document.frames.item(2).document;
 for i := 0 to Doc.All.Length - 1 do
 begin
 Application.ProcessMessages;
   if (Pos(aText, Doc.All.Item(i).InnerText)<>0)
    and (length(Doc.All.Item(i).InnerText)=length(aText)) then
  begin
If Form8.checkBox5.Checked=true then Doc.All.Item(i).Style.BackGroundColor:=Form8.Edit1.Text;
If Form8.checkBox7.Checked=true then Doc.All.Item(i).Style.Color:=Form8.Edit2.Text;
exit;
   end;
 end;
except
end;
end;

If Form8.CheckBox14.Checked=True then begin
try
doc:=Form1.EmbeddedWB1.oleobject.document.frames.item(2).document;
 for i := 0 to Doc.All.Length - 1 do
 begin
 Application.ProcessMessages;
   if (Pos(aText, Doc.All.Item(i).InnerText)<>0)
    and (length(Doc.All.Item(i).InnerText)=length(aText)) then
  begin
If Form8.checkBox3.Checked=true then Doc.All.Item(i).Style.BackGroundColor:=Form8.Edit1.Text;
If Form8.checkBox9.Checked=true then Doc.All.Item(i).Style.Color:=Form8.Edit2.Text;
exit;
   end;
 end;
except
end;
end;

If Form8.CheckBox15.Checked=True then begin
try
doc:=Form1.EmbeddedWB1.oleobject.document.frames.item(2).document;
 for i := 0 to Doc.All.Length - 1 do
 begin
 Application.ProcessMessages;
   if (Pos(aText, Doc.All.Item(i).InnerText)<>0)
    and (length(Doc.All.Item(i).InnerText)=length(aText)) then
  begin
If Form8.checkBox4.Checked=true then Doc.All.Item(i).Style.BackGroundColor:=Form8.Edit1.Text;
If Form8.checkBox10.Checked=true then Doc.All.Item(i).Style.Color:=Form8.Edit2.Text;
exit;
   end;
 end;
except
end;
end;

end;


procedure TForm1.EmbeddedWB1DocumentComplete(Sender: TObject;
 const pDisp: IDispatch; var URL: OleVariant);
var i:integer;
ovElements: OleVariant;
k:integer;
s:string;
begin
If Form8.CheckBox11.Checked=True then begin
try
For k:=0 to Form8.ListBox1.Count Do
Begin
Form8.ListBox1.ItemIndex:=k;
s:=Form8.ListBox1.items[Form8.ListBox1.ItemIndex];
SearchAndHighlightText(s);
end;
except
end;
end;

If Form8.CheckBox13.Checked=True then begin
try
For k:=0 to Form8.ListBox5.Count Do
Begin
Form8.ListBox5.ItemIndex:=k;
s:=Form8.ListBox5.items[Form8.ListBox5.ItemIndex];
SearchAndHighlightText(s);
end;
except
end;
end;

If Form8.CheckBox12.Checked=True then begin
try
For k:=0 to Form8.ListBox3.Count Do
Begin
Form8.ListBox3.ItemIndex:=k;
s:=Form8.ListBox3.items[Form8.ListBox3.ItemIndex];
SearchAndHighlightText(s);
end;
except
end;
end;

If Form8.CheckBox14.Checked=True then begin
try
For k:=0 to Form8.ListBox4.Count Do
Begin
Form8.ListBox4.ItemIndex:=k;
s:=Form8.ListBox4.items[Form8.ListBox4.ItemIndex];
SearchAndHighlightText(s);
end;
except
end;
end;

If Form8.CheckBox15.Checked=True then begin
try
For k:=0 to Form8.ListBox2.Count Do
Begin
Form8.ListBox2.ItemIndex:=k;
s:=Form8.ListBox2.items[Form8.ListBox2.ItemIndex];
SearchAndHighlightText(s);
end;
except
end;
end;

try
If Form3.CheckBox6.Checked=True then Form1.EmbeddedWB1.OleObject.Document.frames.Item(2).Document.Body.bgcolor:=Form3.Edit7.Text;
If Form3.CheckBox7.Checked=True then Form1.EmbeddedWB1.OleObject.Document.frames.Item(3).Document.Body.bgcolor:=Form3.Edit8.Text;
If Form3.CheckBox8.Checked=True then Form1.EmbeddedWB1.OleObject.Document.frames.Item(4).Document.Body.bgcolor:=Form3.Edit11.Text;
If Form3.CheckBox9.Checked=True then Form1.EmbeddedWB1.OleObject.Document.frames.Item(2).Document.Body.background:=Form3.edit13.Text;
If Form3.CheckBox10.Checked=True then Form1.EmbeddedWB1.OleObject.Document.frames.Item(3).Document.Body.background:=Form3.Edit13.Text;
If Form3.CheckBox11.Checked=True then Form1.EmbeddedWB1.OleObject.Document.frames.Item(4).Document.Body.background:=Form3.Edit14.Text;
except
end;

try
If mag=1 then begin
MagTime('Не удалось прочесть заклятие');
MagTime('Удачно использовано заклинание.');
end;
except
end;


ТехникПТО   (2005-03-03 20:07:00) [50]


> АП туфту не говорит(по крайней мере я не видел ни разу)
> так что прежде чем апелировать его словам думай и ищи ошибку
> у себя
> скорость выполнения цикла изменится, но не программы

как ускорить скорость выполнения цикла?


DiamondShark   (2005-03-03 20:06:00) [51]


> а в какое место цикла кидать?? в начало или в конец?

Так ведь цикла твоего никто в глаза не видел.


default   (2005-03-03 20:04:00) [52]

ТехникПТО ©   (03.03.05 20:00) [6]
откройте исходник Application.ProcessMessages и посмотрите что там делается чтобы не писать [5]
ТехникПТО ©   (03.03.05 20:00) [6]
АП туфту не говорит(по крайней мере я не видел ни разу)
так что прежде чем апелировать его словам думай и ищи ошибку у себя
скорость выполнения цикла изменится, но не программы


ТехникПТО   (2005-03-03 20:00:00) [53]


> И ответ по вопросу - скорость выполнения программы во время
> выполнения цикла не меняется

идет чтение списка... обращение в процедуре которая проверяет.. имееться ли на странице такое слово или нет... если да то меняет цвет шрифта... учитывая скорость инета и другие факторы...
порой даже цикл вознобновляеться вновь до его окончания...т.е. он еще не успел обработаться полностью а его уже заного гонят.. дык как быть??


ТехникПТО   (2005-03-03 19:58:00) [54]


> Подробнее: вставьте строку Application.ProcessMessages в
> тело цикла. Желательно, однако, вызывать ProcessMessages
> не на каждой итерации цикла, а по мере необходимости

а в какое место цикла кидать?? в начало или в конец?


Anatoly Podgoretsky   (2005-03-03 19:50:00) [55]

И ответ по вопросу - скорость выполнения программы во время выполнения цикла не меняется.


begin...end   (2005-03-03 19:45:00) [56]

> ТехникПТО ©   (03.03.05 19:42) [2]

Подробнее: вставьте строку Application.ProcessMessages в тело цикла. Желательно, однако, вызывать ProcessMessages не на каждой итерации цикла, а по мере необходимости.


ТехникПТО   (2005-03-03 19:42:00) [57]


> Application.ProcessMessages ?

а поподробнее?


Alex_Petr   (2005-03-03 19:41:00) [58]

Application.ProcessMessages ?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо