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

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

БД + потоки [D5, Paradox]


Zilog ©   (2004-12-14 10:47:00) 

в потоке работаю с БД (стандартные компоненты), в том числе происходит обращение и к главной форме.

При закрытии программы (поток завершает свою работу раньше) возникает ошибка - недопустимый дескрипотор окна. Что я неправильно делаю?


Zilog   (2004-12-14 12:11:00) [1]

уже разобрался, спасибо. всё работает таким образом:
Synchronize(Start);
Report;
Synchronize(Stop);


Digitman   (2004-12-14 12:08:00) [2]


> Верно?


неверно.
зачем ты все подряд синхронизируешь ? весь смысл использования доп.код.потока пропадает при этом.

синхронизация требуется лишь для тех методов/св-в VCL-объектов, к которым потенциально возможны обращения со строны осн.код.потока


Zilog   (2004-12-14 12:01:00) [3]

прочитал, переделал:

 Synchronize(Start);
 Synchronize(Report);
 Synchronize(Stop);

Верно?

Только в таком случае, при работе блокируется управление главной формой, это нормально?


stone   (2004-12-14 11:35:00) [4]

Когда поток создаешь, там про метод Synchronize написано. Читал?


Digitman   (2004-12-14 11:34:00) [5]


> Zilog ©   (14.12.04 11:24) [2]


обращения к VCL-объектам (в 1-ю очередь - визуальным) из доп.код.потока недопустимыбез синхронизации с осн.код.потоком

см.метод TThread.Synchronize и пример его использования в демо-проекте threads.dpr


Zilog   (2004-12-14 11:24:00) [6]

procedure TReportThread.Execute;
begin

 FMain.TabControl1.Cursor := crHourGlass;
 FMain.TabControl1.Enabled := false;
 FMain.Panel14.Visible := true;

 Report; << работа с БД тут

 Fmain.DBGridReport.Refresh;
 FMain.Panel14.Visible := false;
 FMain.TabControl1.Enabled := true;
 FMain.TabControl1.Cursor := crDefault;

end;


Digitman   (2004-12-14 10:58:00) [7]

код метода Execute покажи


Наверх

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