![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скорость работы программы во время выполнения цикла [D6, WinXP]
ТехникПТО © (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 ?