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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки 
:(
    Опции темы
AlexeyShestchenko
Дата 25.3.2008, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем привет.
Написал довольно емкую программу со множеством процедур.
Работа программы сводится к выбору через checkbox'ы выполнение нужных процедур.
Сначала программа выполняет ряд функций и выводит результат в listbox, затем по buttonclick проверяются какие checkbox в true и начинают выполнение....по порядку. Все процедуры берут данные из listbox и проверяют подходят ли они им и совершают дальнейшие вычисления. Процедур довольно много,пока 17,но будет еще больше,около 50. Можно представить сколько займет времени анализ)))
Мне посоветовали использовать потоки. На этом сайте нашел статью Петровича, но так как мой общий уровень знания ПК пока еще далеко мал, то не все понятно :(
Использование потоков у себя п программе я вижу так: Получаем входные данные в основной программе,анализируем основным потоком и выводим в listbox, затем врубаем все потоки и они начинают свою работу не тормозя основную форму и выводя результаты в соответствующие контролы.

Идеальным вариантом было бы следующее: врубаем все потоки,они ждут кога появятся данные в listbox, а данные появляются при работе основного потока в программе, таким образом можно было бы сильно сократить время выполнения всех операций. Надеюсь я правильно думаю,поправьте если не так,буду благодарен.

Хотелось бы еще увидеть тут конкретные советы =) 
Спасибо всем!

PM MAIL   Вверх
AlexeyShestchenko
Дата 26.3.2008, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



использую так
Код

form1:

...
  private
      FThreadRefCount: integer;
      procedure HandleTerminate(Sender: TObject);
...

 uses
   PrimeThread;


oncreate
  FThreadRefCount := 0;

closequery
CanClose := true;
  if FThreadRefCount > 0 then
  begin
    if MessageDlg('Threads active. Do you still want to quit?',
      mtWarning, [mbYes, mbNo], 0) = mrNo then
      CanClose := false;
  end;


procedure TForm1.Button8Click(Sender: TObject);
var
  NewThread: TPrimeThrd;

begin
  NewThread := TPrimeThrd.Create(True);
  NewThread.FreeOnTerminate := True;
  try
    with NewThread do
    begin
      Inc(FThreadRefCount);
      OnTerminate := HandleTerminate;
      Resume;
    end;
  except on EConvertError do
    begin
      NewThread.Free;
      ShowMessage('That is not a valid number!');
    end;
  end;

end;



рассчеты с одного потока прошли успешно все ок, но когда я закрываю программу то вылезает ошибка,самое интересное что я создал путсую форму сделал там работу только потока и все нормально без ошибок, а в моей программе вылезает ошибка
system error: code:1400 недопустимый дискриптор окна, а иногда вылезает и ругается на tabcontrol,точнее не иногда а вслед за ошибкой 1400, control tabsheet1 has no parent window

Это сообщение отредактировал(а) AlexeyShestchenko - 26.3.2008, 00:33
PM MAIL   Вверх
AlexeyShestchenko
Дата 26.3.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



неужели никто не может мне подсказать? :(
PM MAIL   Вверх
MetalFan
Дата 26.3.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



словами код не опишешь.
ошибка в 17й строке...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
AlexeyShestchenko
Дата 26.3.2008, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вроде заработало, вынес listbox1.clear; listbox2.clear; в отдельную процедуру и потом вызываю ее в execute sychn.пока работает, посмотрим как дальше будет себя вести)
PM MAIL   Вверх
MetalFan
Дата 26.3.2008, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



ага. из потока с компонентами на форме работаешь?!!


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
AlexeyShestchenko
Дата 26.3.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



так точно!
PM MAIL   Вверх
THandle
Дата 26.3.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



AlexeyShestchenko, из дополнительных потоков работать с VCL компонентами нельзя. 

Почитай:
http://forum.vingrad.ru/topic-60076/view-f...t/p-480368.html
PM   Вверх
AlexeyShestchenko
Дата 26.3.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(THandle @  26.3.2008,  16:39 Найти цитируемый пост)
 из дополнительных потоков работать с VCL компонентами нельзя. 

для решения этой проблемы надо создавать в потоке свои стринглисты передавать инфу им и работать уже сними,а потом результат кидать наа форму в vcl, я правильно понимаю?
Спасибо все за ответы!
PM MAIL   Вверх
MetalFan
Дата 27.3.2008, 00:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



в общем единственный дельный совет, что в голову приходит, читать статью про потоки до полного просветления...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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