![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка в выполнении параллельного потока [D2005, XP]
ГореПрограммер © (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 сообщение появляется только один раз