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

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

Обработка в потоках [D6]


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

Term ©   (2005-12-13 12:08:00) 

Работаю с БД из двух TThread, они между собой не пересекаются, т.е используют каждый только свои компоненты.

Так как они не пересекаются то я их и не синхронизировал. Но при работе наблюдаются глюки, то строчки в БД не пропишутся(при append'е), то TGauge начинает глючить (отрисовывается неправильно) и т.д.

Что можете посоветовать


Term   (2005-12-13 16:43:00) [1]

понятно!!!


evvcom   (2005-12-13 15:35:00) [2]


> работает только один поток......... всё на разных формах,
>  НИКАК ПОТОКИ НЕ ПЕРЕСЕКАЮТСЯ....

Именно пересекаются! При отображении в гриде доп.поток пересекается с основным.


Term   (2005-12-13 15:30:00) [3]


> одновременный доступ к объекту из разных потоков.

понятно, вот только с каждым объектом работает только один поток......... всё на разных формах, НИКАК ПОТОКИ НЕ ПЕРЕСЕКАЮТСЯ....

но спасибо, теперь хотябы представляю где копать


Игорь Шевченко   (2005-12-13 15:00:00) [4]

Program Files\Borland\Delphi\Demos\Db\BkQuery\*.*

читать, изучать, думать


evvcom   (2005-12-13 14:58:00) [5]


> да же в том случае если для каждого потока DBGrid свой?

Отключай какую-бы-то ни было автоматическую работу с визуальными контролами из доп.потоков. Выполняй действия с НД, синхронизируй через synchronize, например, свой TGauge и только после того как запрос выполнится, в основном!потоке подключить DBGrid. Т.е. ты должен предотвратить любой одновременный доступ к объекту из разных потоков.


Tor   (2005-12-13 14:57:00) [6]

Могу выслать главу из книги для делфи. Эта глава потокам посвящена.


Tor   (2005-12-13 14:49:00) [7]

2 Term Либо в синхронайзу либо в критических секциях или через мульти-пульти рид врайт синхронайзер(типа этого :) ), остальное трогать пока не будем. Где у тебя дата модули создаются?! В контексте основного потока, а работаеш из дочерних?! Переопредели конструктор потока там создавай свой дата модуль. В деструкторе уничтожай.


Term   (2005-12-13 14:48:00) [8]

Удалено модератором
Примечание: Создание пустых сообщений


Term   (2005-12-13 14:40:00) [9]


> обращения к визуальным VCL-контролам в контексте НЕосновного
> код.потока НЕдопустимы !


да же в том случае если для каждого потока DBGrid свой?


Term   (2005-12-13 14:33:00) [10]


> обращения к визуальным VCL-контролам в контексте НЕосновного
> код.потока НЕдопустимы !

а скажем если нужно чтото вывести на статус бар, это должно быть в Synchronize?


Digitman   (2005-12-13 14:29:00) [11]


> Term ©   (13.12.05 14:24) [36]


обращения к визуальным VCL-контролам в контексте НЕосновного код.потока НЕдопустимы !


Term   (2005-12-13 14:24:00) [12]


> 2автор: Ответь-ка на вопрос. Там у тебя TDataSource есть,
>  ты случаем где-нить в дбгриде или типа того не отображаешь
> эти НД?


да есть..... просветите как оно нужно в этом случае

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

////////////ïîòîê ïðèõîäà/////////////////
procedure TPrihod.Execute;
begin
//Synchronize(ConectDB);
Prihod.FreeOnTerminate:=true;
Start;
end;

procedure TPrihod.Start;
begin
Prihod_Zaliv.P_Zagolovki.First;

kol_zagolovkov:=0;
kol_strok:=0;

time1:=0;
Prihod_Zaliv.Timer1.Enabled:=true;
Prihod_Zaliv.Timer2.Enabled:=true;
while not Prihod_Zaliv.P_Zagolovki.Eof do
      begin
      if FileExists(Prihod_Zaliv.P_Zagolovki.FieldByName('DIR').AsString+'\P_temp.cdx') then DeleteFile(Prihod_Zaliv.P_Zagolovki.FieldByName('DIR').AsString+'\P_temp.cdx');
      Prihod_Zaliv.HO_Inx_pr.DatabaseName:=Prihod_Zaliv.P_Zagolovki.FieldByName('DIR').AsString;
      Prihod_Zaliv.HO_Inx_pr.TableName:=Prihod_Zaliv.P_Zagolovki.FieldByName('FILE').AsString;
      Prihod_Zaliv.HO_Inx_pr.Open;
      Prihod_Zaliv.HO_Inx_pr.IndexOn('P_TEMP.cdx','NUMDC4','NUMDC4','',Duplicates, Ascending);
      Prihod_Zaliv.HO_Inx_pr.Close;

      Great_Prihod_Pereliv(Prihod_Zaliv.P_Zagolovki.FieldByName('DIR').AsString, Prihod_Zaliv.P_Zagolovki.FieldByName('FILE').AsString);
      ////////////////
      Prihod_Zaliv.P_Zagolovki.Next;
      end;
Prihod_Zaliv.Timer1.Enabled:=false;
Prihod_Zaliv.Timer2.Enabled:=false;
Prihod_begin:=false;
end;
//////////////////////////////////////////


в процедуре Great_Prihod_Pereliv(Prihod_Zaliv.P_Zagolovki.FieldByName('DIR').AsString, Prihod_Zaliv.P_Zagolovki.FieldByName('FILE').AsString);

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


evvcom   (2005-12-13 14:10:00) [13]


> в котором три дня разбираться надо

во-во, и мне лень.
2автор: Ответь-ка на вопрос. Там у тебя TDataSource есть, ты случаем где-нить в дбгриде или типа того не отображаешь эти НД?

> то TGauge начинает глючить (отрисовывается неправильно)

а его где и как показываешь?


Игорь Шевченко   (2005-12-13 13:54:00) [14]

Ты напиши свой пример из трех строк, с двумя потоками и двумя датамодулями, убрав все неотносящееся к проблеме. Мазохистов нету такой код смотреть, в котором три дня разбираться надо.


Term   (2005-12-13 13:52:00) [15]

Удалено модератором
Примечание: Создание пустых сообщений


Term   (2005-12-13 13:51:00) [16]

Удалено модератором
Примечание: Создание пустых сообщений


Term   (2005-12-13 13:42:00) [17]


> Тебе уже два раза сказали, что у каждого потока должно быть
> свое подключение.


ну я же так и делаю два TDataModule, для каждого потока свой, и там для каждого потока свой TADOConnection, вроде так и есть....


Игорь Шевченко   (2005-12-13 13:38:00) [18]

Тебе уже два раза сказали, что у каждого потока должно быть свое подключение.


Term   (2005-12-13 13:38:00) [19]

что нет так ??? вроде всё простенько


Term   (2005-12-13 13:31:00) [20]

проблема в том что не в потоке все работает нормально, а в потоках начинаются глюки


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

Наверх

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