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

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

Работа с потоками! [D7, WinXP]


Страницы:   1 2

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


Страницы:   1 2

Наверх

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