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

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

Ошибка в выполнении параллельного потока [D2005, XP]


Страницы:   1 2 3 4 5 6

ГореПрограммер ©   (2006-11-07 12:51:00) 

Здравствуйте.
есть клас:
 Tloadfon = class(TThread)
 protected
   procedure sinform;
   procedure Execute; override;
 end;

procedure tloadfon.sinform;
begin
fstart.prog1.StepIt;
end;
procedure tloadfon.Execute;
var i:integer;
begin
FreeOnTerminate := True;
for i := 0 to ar_excel.count - 1 do
 begin
   if Terminated then
     Break;
   loadip(ar_excel.zaps[i].mac,i);
   getminup(ar_excel.zaps[i].id);
   Synchronize(sinform);
 end;
end;

В момент обращения к нему, т.е.
tloadfon.create(false);

выдается ошибка базы данных:
dbExpress Error: Unknown Error Code '256'
[0x0005]: Operation Not Supported
Database Server Error: Failed to query the server.(Error "2013"; Reason "Lost connection to MySQL server during query")

если выполнять функции loadip и getminup  не в этом потоке, а просто в программе, то никаких ошибок не происходит. Подскажите пожалуйста где искать ошибку ?


ГореПрограммер   (2006-11-07 16:54:00) [61]


>
> Ты убрал? Проблема исчезла или нет?

да, сейчас пытаюсь понять каким образом SQL запрос может такое вызвать такие последствия...


Anatoly Podgoretsky   (2006-11-07 16:53:00) [62]

> ГореПрограммер  (07.11.2006 16:02:44)  [44]

Ты убрал? Проблема исчезла или нет?


Anatoly Podgoretsky   (2006-11-07 16:53:00) [63]

> MetalFan  (07.11.2006 16:30:46)  [46]

Промывание мозгов через одно место


MetalFan   (2006-11-07 16:30:00) [64]

класс ребята! групповая удаленная отладка))))


Сергей М.   (2006-11-07 16:05:00) [65]


> ГореПрограммер   (07.11.06 16:02) [44]


> а как тогда выполнять


Каком кверху.
Это намек на то, что в одной из этих п/программ у тебя ошибка.


ГореПрограммер   (2006-11-07 16:02:00) [66]


> Так оно и есть и у меня есть подобные потоки, как написано
> так и работает - ar_excel.count число раз.
> Убери Synchronize
>

а как тогда выполнять
> loadip(ar_excel.zaps[index].mac,index);
> getminup(ar_excel.zaps[index].id);

?


Anatoly Podgoretsky   (2006-11-07 15:25:00) [67]

> ГореПрограммер  (07.11.2006 15:11:40)  [40]

Так оно и есть и у меня есть подобные потоки, как написано так и работает - ar_excel.count число раз.
Убери Synchronize


Сергей М.   (2006-11-07 15:17:00) [68]

А если не получишь, то рассказывай подробно, что такое ar_excel, откуда он взялся ..


Сергей М.   (2006-11-07 15:13:00) [69]


> Synchronize(sinform);


Закомментарь эту строчку - получишь желаемое.


ГореПрограммер   (2006-11-07 15:11:00) [70]


> for i := 0 to ar_excel.count - 1 do
>  begin
>    if Terminated then
>      Break;
>    index:=i;
>    Synchronize(sinform);
>  end;

Да вроде по этому коду он должен выполнится ar_excel.count число раз. а не бесконечно


Сергей М.   (2006-11-07 15:03:00) [71]


> хотел чтобы цикл выполнился один раз, а не бесконечное число
> раз
>


Он и будет выполняться столько раз, сколько ему тобой предписано. Если найдешь и устранишь ошибки. Собственно к данномупотоку это не имеет ни малейшего отношения - то же самое можно "накосячить" в любом ином потоке, в т.ч. и основном.


ГореПрограммер   (2006-11-07 15:01:00) [72]


>
> Но ты же именно это и просил, чем теперь недоволен?

Я хотел чтобы цикл выполнился один раз, а не бесконечное число раз


Сергей М.   (2006-11-07 14:55:00) [73]


> FreeOnTerminate := True;
> for i := 0 to ar_excel.count - 1 do //<-- ставь брейкпойнт сюда и - вперед с песней, пошагово, с контролем происходящего после каждого шага


Anatoly Podgoretsky   (2006-11-07 14:50:00) [74]

> ГореПрограммер  (07.11.2006 14:19:30)  [30]

Но ты же именно это и просил, чем теперь недоволен?


ГореПрограммер   (2006-11-07 14:47:00) [75]

Да, именно сюда


Сергей М.   (2006-11-07 14:42:00) [76]


> fstart.prog1.Position:=0; // <--- сюдаставишь ?
> fstart.stat.Panels[0].Text:='Все данные загружены';


Anatoly Podgoretsky   (2006-11-07 14:39:00) [77]


> if Terminated then exit; вместо break

Смысла нет, масло масляное


ГореПрограммер   (2006-11-07 14:30:00) [78]


> Сергей М. ©   (07.11.06 14:25) [31]

Если ставлю точку остановки на следующую строку после цикла то процесс выполнения не прерывается


Сергей М.   (2006-11-07 14:25:00) [79]

Отладчиком умеешь пользоваться ?


ГореПрограммер   (2006-11-07 14:19:00) [80]

Поставил. ситуация таже( вызывает create один раз, после строки создания потока поставил showmessage  сообщение появляется только один раз


Страницы:   1 2 3 4 5 6

Наверх

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