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  не в этом потоке, а просто в программе, то никаких ошибок не происходит. Подскажите пожалуйста где искать ошибку ?


ANB   (2006-11-08 14:16:00) [21]

Для начинающих медленно и 2 раза :


Creates an instance of a thread object.

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.


Anatoly Podgoretsky   (2006-11-08 14:13:00) [22]

> ГореПрограммер  (08.11.2006 13:46:24)  [84]

Уже 84 сообщения и ты сто процентов менял код, поэтому говорить о каком то неизвестном коде нет смысла.


Anatoly Podgoretsky   (2006-11-08 14:13:00) [23]

> ANB  (08.11.2006 13:34:23)  [83]

А зря, я в последнем проекте долго думал, прежде чем использовать потоки, хотя там мог обойтись и без них и с более высокой надежностью. Пришлось также ограничить возможность запуска одноименного потока, для это организовал пул потоков. Каждый запускается только один раз, при повторном запуске не сможет.


Anatoly Podgoretsky   (2006-11-08 14:11:00) [24]

> Сергей М.  (08.11.2006 13:33:22)  [82]

Все гадания.


Anatoly Podgoretsky   (2006-11-08 14:10:00) [25]

> ГореПрограммер  (08.11.2006 13:21:19)  [79]

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


ГореПрограммер   (2006-11-08 13:46:00) [26]


> Раз ты убрал все это хозяйство в Synchronize(), то отныне
> та самая твоя "подгрузка" осуществляется в основном потоке
> !
>
> В чем тогда смысл использования параллельного потока ? Ни
> в чем. Его можно смело выбросить в мусор.

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

> MyThread := TLoadfon.Create(...);
> MyThread.Execute;

Неоднократно уже писал код запуска ) нет там такого.


ANB   (2006-11-08 13:34:00) [27]


> В чем тогда смысл использования параллельного потока ? Ни
> в чем.

Это типа - помудохаться. Ибо круто и модно.


Сергей М.   (2006-11-08 13:33:00) [28]

И (см. [80]) подозреваю, что у тебя фигурирует такой код :

MyThread := TLoadfon.Create(...);
MyThread.Execute;

?


Сергей М.   (2006-11-08 13:31:00) [29]


> один единственный параллельный, который как раз подгружает
> эти данные


Раз ты убрал все это хозяйство в Synchronize(), то отныне та самая твоя "подгрузка" осуществляется в основномпотоке !

В чем тогда смысл использования параллельного потока ? Ни в чем. Его можно смело выбросить в мусор.


ANB   (2006-11-08 13:30:00) [30]


> ГореПрограммер   (08.11.06 13:21) [79]

1. ИМХО ты доп.поток умудряешься 2 раза запустистить. покажи код запуска потока.
2. Пока доп поток работает - чего главный делать то должен ? Если он без данных, загруженных доп.потоком работать не может - то лучше глянуть в сторону асинхронки, понадежнее будет.


ГореПрограммер   (2006-11-08 13:21:00) [31]


> Зачем на словах, у него же явно много потоков запускается,
>  ведь именно на это и жалуется.

Нет, есть основной поток, в котором работает вся программа и один единственный параллельный, который как раз подгружает эти данные


Anatoly Podgoretsky   (2006-11-08 13:18:00) [32]

> Сергей М.  (08.11.2006 13:03:17)  [77]

Зачем на словах, у него же явно много потоков запускается, ведь именно на это и жалуется.


Сергей М.   (2006-11-08 13:03:00) [33]


> изменений внутри этой переменной не происходит


Это все на словах.

А теперь подтверди это реальным кодом ..


ГореПрограммер   (2006-11-08 12:56:00) [34]


> И доступ к azap_excel наверно возможен из разных потоков

Да, возможен. но изменений внутри этой переменной не происходит, изменения вносятся в момент выполнения паралельного потока только им.


Сергей М.   (2006-11-08 12:48:00) [35]


> Count это просто колличество записей в массиве


Вот так и говори : count - это поленекоей записи)

Что скажешь насчет [73] ?


DVM   (2006-11-08 12:31:00) [36]


> Какая же другая, когда это находится в секции public

если public тогда без разницы конечно


Anatoly Podgoretsky   (2006-11-08 12:22:00) [37]

> ГореПрограммер  (08.11.2006 11:17:11)  [71]

И доступ к azap_excel наверно возможен из разных потоков


Anatoly Podgoretsky   (2006-11-08 12:20:00) [38]

> DVM  (08.11.2006 10:31:06)  [66]

Какая же другая, когда это находится в секции public глобальнее уровня нет.


ГореПрограммер   (2006-11-08 11:17:00) [39]


> Сергей М. ©   (08.11.06 11:06) [70]

Массив динамический. вместо count можно, безусловно, и использовать length, но было изначально сделано так. Count это просто колличество записей в массиве.
rzap_excel=record
 id:string;
 sat:string;
 stat:string;
 mac:string;
.....
....
....
end;
azap_excel=record
 count:integer;
 zaps:array of rzap_excel;
end;
var
ar_excel:azap_excel;


Сергей М.   (2006-11-08 11:06:00) [40]


> ar_excel это массив данных типа record


И откуда у массива (!) взялось нечто выглядящее как count ?
Давай уже показывай декларацию ...


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

Наверх

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