Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с потоками! 
:(
    Опции темы
Grol
Дата 28.5.2005, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



Здравствуйте мастера 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.

--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
zalex
Дата 28.5.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: 2
Всего: 2



Вообще конечно интересно почему так медленнит :), но попробуй приоритет потоку накрутить. А по приведенному коду всё правильно.
PM MAIL   Вверх
Grol
Дата 28.5.2005, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



А как приоритет выше поставить?
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
Петрович
Дата 29.5.2005, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Надеюсь в GlobalRaschet нет обращений к VCL. И тем более там не должно быть Application.ProcessMessage.
А вообще, запуск потока делашь правильно, но здесь трудно ошибиться smile.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Guest
Дата 29.5.2005, 11:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











MyPotok.Priority:=...
tpIdle The thread executes only when the system is idle. The system will not interrupt other threads to execute a thread with tpIdle priority.
tpLowest The thread's priority is two points below normal.
tpLower The thread's priority is one point below normal.
tpNormal The thread has normal priority.
tpHigher The thread's priority is one point above normal.
tpHighest The thread's priority is two points above normal.
tpTimeCritical The thread gets highest priority.
  Вверх
Grol
Дата 29.5.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



Надеюсь в GlobalRaschet нет обращений к VCL... А что это значит?
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
Dynamic
Дата 29.5.2005, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



Цитата(Grol @ 29.5.2005, 19:57)
Надеюсь в GlobalRaschet нет обращений к VCL... А что это значит?

Типа,
Код

MainForm.ListBox.Items.Add('asdasd');
т.е. обращений к визуальным компонентам


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Marriage
Дата 29.5.2005, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Простите за тупой вопрос ...
А где в приведенном выше коде поток ЗАПУСКАЕТСЯ. Как создаётся вижу .....
А где от запускается ??? smile

Цитата
Типа,
код Pascal/Delphi
1:

MainForm.ListBox.Items.Add('asdasd');




т.е. обращений к визуальным компонентам

А для этого нужно использовать synchronyze (может опшибся в написании), насколько мне помниться ...

Это сообщение отредактировал(а) Marriage - 29.5.2005, 20:31


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Dynamic
Дата 29.5.2005, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



Цитата(Marriage @ 29.5.2005, 20:27)
А где от запускается ???

Код

MyThread := TMyThread.Create(False);

Цитата
constructor Create(CreateSuspended: Boolean);

Description

Call Create to create a thread in an application. If CreateSuspended is False, Execute is called immediately. If CreateSuspended is True, Execute won’t be called until after Resume is called.



--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Marriage
Дата 30.5.2005, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Dynamic
Спасибо smile


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Grol
Дата 1.6.2005, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



А подскажите тогда, как остановить этот поток, т.е. поток запушен и производятся расчеты в процедуре, как в этом случае остановить поток? smile
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
December
Дата 1.6.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Thread.Suspend


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Петрович
Дата 1.6.2005, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата(December @ 1.6.2005, 19:17)
Thread.Suspend

Suspend приостанавливает поток, а не останавливает его. Т.е. поток конечно останавливается, но не удаляется из системы, а готов в любой момент продолжить выполнение. Естественно, его ресурсы при этом не освобождаются.
А вообще, всем очень рекомендую почитать замечательную статью о потоках: http://mbo88.narod.ru/ToC.html



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
December
Дата 2.6.2005, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Цитата
Suspend приостанавливает поток, а не останавливает его.

Мне показалось, что именно это и нужно smile
За ссылку -+- спасибо!


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.