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