![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с потоками! [D7, WinXP]
grol © (2005-05-28 21:13:00)Здравствуйте мастера Delphi!!! Есть процедура GlobalRaschet. Она долго выполняется, если ее вызвать (там работа с массивами). Если процедура вызывается с потоком формы, то она
выполнится за 5 минут, но вот если процедуру вызвать в новом потоке, то выполнится она намного медленнее, даже примерно за 15-20 минут! Вопрос такой: с чем это может быть связано и как это устранить? Т.е. мне необходимо, наверное, увеличить приоритет этого потока или еще что-нибудь. И вообще правильно я создал поток? Уважаемые мастера Delphi помогите мне пожалуйста разобраться в чем дело. Спасибо заранее!
unit Result;
interface
uses
...
type
TResultForm = class(TForm)
...
private
public
end;
type
TMyThread = class(TThread)
protected
procedure Execute; override;
end;
var
ResultForm: TResultForm;
...
procedure GlobalRaschet;
var ...
begin
....
end;
procedure TResultForm.Button1Click(Sender: TObject);
var
MyThread: TMyThread;
begin
MyThread := TMyThread.Create(False);
end;
procedure TMyThread.Execute;
begin
GlobalRaschet;
end;
end.
Defunct (2005-05-28 21:33:00) [21]> с чем это может быть связано и как это устранить?
Может быть связано с тем, что основной поток тоже занимает процессорное время, а когда вы вынесли из него GlobalRaschet, то ресурс процессора разделяется уже между двумя потоками, соотв. вычиления будут выполняться как минимум в 2 раза медленнее.
Чем больше потоков с вычислениями работает одновременно, тем больше времени требуется для выполнения каждого из потоков. (хотя суммарное время выполнения всей работы остается почти одинаковым)
Defunct (2005-05-28 21:26:00) [22]grol © (28.05.05 21:13)
Здесь Вы показываете, что процедура выполняется, просто так (как локальный метод TMyThread) не видно ни как вы задаете исходные данные, ни как вы записываете результат. Может быть у вас там идет приостанов при синхронизации с главным потоком.
В общем из приведенного Вами кода нельзя дать ровным счетом никаких рекомендаций. Тут даже неизвестно повлияет ли повышение приоритета потока.
С уважением,
def