![]() |
|
Модераторы: MetalFan |
![]()
|
|
| oleg153 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 1.3.2007 Репутация: нет Всего: нет |
Приложение работает с таблицей SQL - (Таб-1)
По Таймеру : По таблице делаю Выборку и для выбраных записей выполняю расчеты (бывает долго, 2-5 сек) зависимости от результата меняю одно из полей записи. Возврат результата занимает от милисекунд до 2-5 секунд. При этом для данного приложения я сделал (ActiveX (exe) сервер) несколько методов, которые также используют теже процедуры работы с базой которые описаны в основной (VCL) форме. Чтоб избежать одновременного доступа к процедуре по событию Таймера (VCL-поток) и вызова этой процедуры (или другой, которая тоже работает с Таб-1) внешним приложением через Метод, я использовал Критическую Секцию и выполняю процедуры как через метод описаный в библиотеке, так и в основной форме по таймеру только отработав вход -выход в Критическую секцию. Думал это поможет , НО ВСЕ РАВНО ПРОИСХОДИТ ОДНОВРЕМЕННЫЙ ДОСТУП К ДАННЫМ , значит критическая секция или не действует или что-то я не понимаю. Подскажите КАК сделать так чтоб при наличии нескольких процедур, которые могут вызываться в основной форме и извне, не происходил одновременный запуск , что рушит базу (вернее возникает сбой) |
|||
|
||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 6 Всего: 191 |
||||
|
||||
| oleg153 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 1.3.2007 Репутация: нет Всего: нет |
В основной форме
Смоделировал ошибку. Если procedure: SetData1 вызывается из Основной формы, а SetData2 из Клиентского приложения, тогда : - Если пауза ( Sleep() ) отрабатывается в Основной форме - тогда при попытке исполнить Клиентом SetData2 - он не исполняется, ждет отработки SetData1. - Если пауза исполняется на ВНЕШНЕМ сом-сервере к которому подключаю Основной, и на этом 2-ом сервере отрабатывается пауза (это аналок действий которые на нем отрабатываются в реали и требуют время) - тогда по неясным пока мне причинам Защита через Критическую секцию работать перестает, и можно исполнить SetData2 ДО окончания исполнения SetData1. При этом SetData1 и SetData2 работают с одним набором данных и НЕЛЬЗЯ чтоб SetData2 мог исполниться до ПОЛНОГО исполнения SetData1 Добавлено через 2 минуты и 43 секунды Конечно при описании метода который использует SetData2 я также использую Крит. секцию.
|
||||
|
|||||
![]()
|
| Правила форума "Delphi: ActiveX/СОМ/CORBA" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |