Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
| sheka |
15.12.2011 18:44
Сообщение
#1
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Synchronize делает неактивным приложение, в то время как без него работает. Какие есть варианты решения этой проблемы? В form1.proc есть работа с VCL.
Код (Показать/Скрыть)
Где можно найти нормальное описание Synchronize? Сообщение отредактировано: sheka - 15.12.2011 18:48 |
![]() ![]() |
| sheka |
16.12.2011 18:06
Сообщение
#2
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Хорошее описание, спасибо.
Цитата Дело в том, что метод вызываемый посредством Synchronize() выполняется в контексте основного потока приложения. Это как раз и обеспечивает возможность использования нереентерабельных VCL-компонент. Некоторая информация должна обновляться из базы данных через достаточно короткий промежуток времени. Это обновление происходит ~2 секунды, что есть недопустимо долго. Работа с базой происходит через TIBQuery. Как реализовать данный момент? Как делаю я: В потоке создаю новый IBQuery2, считываю ним информацию из базы. Т.к. с IBQuery2 ничего не взаимодействует, то можно это сделать без использования Synchronize(). А как можно полученную IBQuery2 информацию "присвоить" тому, с которым работает вся остальная программа? |
sheka TThread, Synchronize, VCL 15.12.2011 18:44
IUnknown Synchronize делает неактивным приложение, в то вре... 15.12.2011 19:45
IUnknown Никак. Чтобы получить данные, TIBQuery должна отра... 16.12.2011 18:51
sheka Работает!
Но есть проблема: основная программа... 9.02.2012 17:08
IUnknown Если версия IB ниже 7, то так делать нельзя (на фо... 9.02.2012 19:05
sheka Версия сервера firebird 1.5
IDE - delphi7, значит ... 10.02.2012 11:06
IUnknown Неправда. С семеркой шла IB 5, последний апдейт бы... 10.02.2012 12:55![]() ![]() |
|
Текстовая версия | 11.12.2025 20:34 |