Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизБД + потоки Найти похожие ветки
← →
Zilog © (2004-12-14 10:47) [0]в потоке работаю с БД (стандартные компоненты), в том числе происходит обращение и к главной форме.
При закрытии программы (поток завершает свою работу раньше) возникает ошибка - недопустимый дескрипотор окна. Что я неправильно делаю?
← →
Digitman © (2004-12-14 10:58) [1]код метода Execute покажи
← →
Zilog © (2004-12-14 11:24) [2]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 11:34) [3]
> Zilog © (14.12.04 11:24) [2]
обращения к VCL-объектам (в 1-ю очередь - визуальным) из доп.код.потока недопустимы без синхронизации с осн.код.потоком
см.метод TThread.Synchronize и пример его использования в демо-проекте threads.dpr
← →
stone © (2004-12-14 11:35) [4]Когда поток создаешь, там про метод Synchronize написано. Читал?
← →
Zilog © (2004-12-14 12:01) [5]прочитал, переделал:
Synchronize(Start);
Synchronize(Report);
Synchronize(Stop);
Верно?
Только в таком случае, при работе блокируется управление главной формой, это нормально?
← →
Digitman © (2004-12-14 12:08) [6]
> Верно?
неверно.
зачем ты все подряд синхронизируешь ? весь смысл использования доп.код.потока пропадает при этом.
синхронизация требуется лишь для тех методов/св-в VCL-объектов, к которым потенциально возможны обращения со строны осн.код.потока
← →
Zilog © (2004-12-14 12:11) [7]уже разобрался, спасибо. всё работает таким образом:
Synchronize(Start);
Report;
Synchronize(Stop);
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.045 c