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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Threads, Threads - как создать потоки? 
:(
    Опции темы
Guedda
Дата 17.1.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



В общем, выложи код, которым вызываешь, и код самого потока.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Barovskiy
Дата 17.1.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Albinos_x @ 17.1.2006, 10:27 Найти цитируемый пост)

OnClose
или
OnDestroy
обрабатываешь?


Здесь у меня ничего не обрабатывается

Цитата(Guedda @ 17.1.2006, 10:22 Найти цитируемый пост)

Может ты в потоке вызываешь MessageDlg or ShowMessage?
Опиши подробнее ошибку.



тоже ничего нету


Может быть вылетает шибка из-за того что я делаю запись всего лога в текстовый файл?????
Хотя не должно быть ...



А вот сама ошибка
user posted image

Главное выпригивает послето того как пройдет весь цикл

если просто открыть и закрыть прогу то ничего не выпригивает smile
Цитата(Guedda @ 17.1.2006, 10:31 Найти цитируемый пост)

В общем, выложи код, которым вызываешь, и код самого потока.

Сейчас выложу все

Это сообщение отредактировал(а) Barovskiy - 17.1.2006, 12:51
PM MAIL   Вверх
Alexeis
Дата 17.1.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Почему бы не попробовать найти ошибку трасировкой F7, F8
Добавлено @ 12:58
или накидать брекпоинтов


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Barovskiy
Дата 17.1.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



код потока

Код


procedure ChekIp;
var
  s: TStrings;
  d, i: integer;

begin
                         
  if Form1.filepath.Text<>'' then begin
  s := TStringList.Create;
  Form1.Label1.Caption:='0';
Form1.Label4.Caption:='0';
Form1.Label6.Caption:='0';
Form1.Label8.Caption:='0';
Form1.Label11.Caption:='0';
Form1.Button1.Enabled:=false;
 Form1.label9.Caption:='Begin';
 stop:= false;
 Form1.label6.Font.Color:= clBlack ;
  try
     s.LoadFromFile (Form1.OpenDialog1.FileName);   // создаю файл типа стринг и загружаю в него файл с опен диаога
      for d := 0 to s.Count -1 do begin  пока не конец файла начинаю считать ... 
       Form1.label1.Caption:= floattostr(strtofloat(Form1.label1.Caption)+1);   //сколько всего в файле записей
      end; // закончили и опять 
   for i := 0 to s.Count - 1 do begin   // пока не конец файла делать ... 

   if Stop=true then Break;   // Stop глобальная переменая булева типа если тру то цикл прекращает работу      

  Form1.edit1.Text := Copy (s[i], 1, Pos ('', s[i]) - 1);  // копирую строку из файла
      Form1.Label4.Caption:=floattostr(strtofloat(Form1.Label4.Caption)+1);  // какой по счету

      Form1.label9.Caption:='Cheking..';
      Form1.memo1.Lines.Add('Chek  '+Form1.Edit1.Text );
       try
        begin                            //  Yield;
       Form1.Edit3.Clear;
       Form1.Edit4.Clear;
       Form1.Edit5.Clear;
      
     if    form1.edit1.GetTextLen > 7 then
        begin
         form1.edit2.text:= (IPAddrToName( Form1.edit1.Text));
          Memo2.Lines.Add((IPAddrToName( Form1.edit1.Text)+'-' + Form1.edit1.Text ))   // пишем имя и айпи в текстовый файл .. точнее вначале в мемо а потом уже в сам текстовик сохраняем мемо ... 
          end  ;
... 
               form1.label6.Font.Color:= clRed ;
                form1.Edit3.Clear;
               end;
               end;
               end;

       except
        on E: Exception do                 // если ошибка 
        begin
        Form1.memo1.Lines.Add(E.Message);  //  записываю ошибку в лог
        Form1.Edit3.Text:=(E.Message);     // записываю ошибку в эдит
        end;
       end;
   { if Form1.edit3.Text='Socket Error # 11001'+#13#10+'Host not found.' then   // потом проверяю чему равна ошибка и при необходимости оповещаю пользователя в чем дело, это вовсе не обязательно 
    begin
   Form1.label9.Caption:='Host not found...';  // статус
   Form1.memo1.Lines.add(Form1.edit3.Text);  // 
   Form1.memo1.Lines.SaveToFile('Log.txt');  // сохранение лога 
    break;
    end else
    ...........
/} //   перечисление множества проверок и условий(если одно равно другому то вот это и так далее), 
//которые можно убать, но ошибка всеравно будет

  finally    //  заканчиваю и освобождаю память, возможно еще чтото именно сюда надо добавить???
    s.Free; //  освобождаю файл типа стринг - с него брались IP адреса
    Form1.label9.Caption:='Complite';   // развоное оформление 
     Form1.Label4.Caption:='0';
    Form1.Button1.Enabled:=true;
    Form1.memo1.Lines.SaveToFile('Log.txt');   // пересохранение лога 
    end;
end;
end;


Вот сам вызов потока

Код


procedure TForm1.Button1Click(Sender: TObject);
var
h:cardinal;
begin

BeginThread(nil,128,@ChekIp,self,0,h);

end;


и все.... работает в отдельном потоке, прога не виснет все нормально, но после того как закончилась работа и закрываю саму прогу то вылетает ошибка.... воть ...
Добавлено @ 13:34
Цитата(alexeis1 @ 17.1.2006, 12:54 Найти цитируемый пост)

Почему бы не попробовать найти ошибку трасировкой F7, F8
Добавлено @ 12:58
или накидать брекпоинтов



Я уже пробовал .... меня дельфи зависает намертво как только я запускаю поток smile
и через 20 минут мне приходится уже через диспечера валить и дельфи и прилажение ...
PM MAIL   Вверх
Guedda
Дата 17.1.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



У тебя какие-то проблемы с хендлом какого-то окна.
Скорее всего, при работе программы, она теряет свой собственный хэндл.

Вопрос: Зачем тебе нужны потоки?
Ответь, пожалуйста, по существу.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Romikgy
Дата 17.1.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



А если эту ф-цию запустить без потока, тож ошибка?
ЗЫ Мож быть целая пачка ошибок, если из потока без дополнительных движений, обращатся к форме!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Barovskiy
Дата 17.1.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Guedda @ 17.1.2006, 13:41 Найти цитируемый пост)

У тебя какие-то проблемы с хендлом какого-то окна.
Скорее всего, при работе программы, она теряет свой собственный хэндл.

Вопрос: Зачем тебе нужны потоки?
Ответь, пожалуйста, по существу.


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

Я так понял мне несколько потоков не получится сделать, или надо весь код заного переделывать...

Ходябы избавиться от этой ошибки хендла ....

Цитата(Romikgy @ 17.1.2006, 13:43 Найти цитируемый пост)

А если эту ф-цию запустить без потока, тож ошибка?
ЗЫ Мож быть целая пачка ошибок, если из потока без дополнительных движений, обращатся к форме!


Если весь код поместить на кнопку то никаких ошибок не вылетает, но все виснет, хотя и работает.
как только перевожу весь код в отдельную процедуру и кнопкой создаю поток то тоже все арботает и прога не виснет, но после закрытия проги вылетает эта ошибка
впринцепи она мне не портит работу, но хочется чтоб было все четко и разобраться почему она вылетает ...
PM MAIL   Вверх
Демо
Дата 17.1.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



Цитата(Barovskiy @ 17.1.2006, 14:32 Найти цитируемый пост)

код потока


Тебе же сказали, что если будешь обращаться к VCL из потока, от ошибок не избавишься.


--------------------
    
PM MAIL ICQ Skype   Вверх
Romikgy
Дата 17.1.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



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


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Guedda
Дата 17.1.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



Да. Вот нашел в книжке.
Цитата

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



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Romikgy
Дата 17.1.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



И еще почитай http://forum.vingrad.ru/index.php?showtopic=60076 это очень помогает!
Добавлено @ 14:36
Цитата(Guedda @ 17.1.2006, 13:34 Найти цитируемый пост)

не следует обращаться к свойствам и методам компонентов VCL...

Можно , но для этого надо делать дополнительные телодвижения


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alexeis
Дата 17.1.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Barovskiy с F7 и у меня были проблемы но при использовании
брекпоинтов (ставлю кучу) и F4 для перескока между ними удавалось
отладить без зависания ( т.е. первую точку прошел - снимаем, вторую и т.д.)

Это сообщение отредактировал(а) alexeis1 - 17.1.2006, 14:52


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Barovskiy
Дата 17.1.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Демо @ 17.1.2006, 14:21 Найти цитируемый пост)

Тебе же сказали, что если будешь обращаться к VCL из потока, от ошибок не избавишься.

А синхронизация у меня не получается :-(
PM MAIL   Вверх
Guedda
Дата 17.1.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



Цитата(Romikgy @ 17.1.2006, 14:35)
И еще почитай http://forum.vingrad.ru/index.php?showtopic=60076 это очень помогает!
Добавлено @ 14:36
Цитата(Guedda @  17.1.2006,  13:34 Найти цитируемый пост)

не следует обращаться к свойствам и методам компонентов VCL...

Можно , но для этого надо делать дополнительные телодвижения

Это всего лишь цитата из учебника.
Я лишь цитирую. Но и придерживаюсь этого мнения.
Если треды не сильно нужны, то лучше ProcessMessages использовать.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Alexeis
Дата 17.1.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата

А синхронизация у меня не получается  smile

а по подробней smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (8) Все « Первая ... 4 5 [6] 7 8 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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