![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с FB 1.5 и IBX [D7]
Zoostal © (2005-11-11 12:05:00)Здравствуйте!
У меня такая проблема. В программе создается 3 потока - №1 постоянно смотрит базу на предмет новых заданий, №2 получает задание от №1, выполняет его и пытается с помощью потока №3 положить результат в базу.
В общем с базой работают потоки №1 и №3. При этом №1 опрашивает базу в цикле с определенной (частой переодичностью), а поток №3 выполняет запись в базу редко (примерно раз в минуту). В обоих потоках идет динамическое создание подключения к БД, то есть создается TIBDataBase и свои TIBTable и TIBQuery.
Проблема заключается в том что когда поток №3 начинает что-то класть в базу то все встает. То есть на строчке, например,
PJExTable.Open;
дальше код не исполняется. Если на время записи потоком №3 в базу данных поток №1 остановить с помощью Suspend то вроде все срабатывает, но это не вариант.
Как решить эту проблему ? Может быть есть какая-то настройка ? что-то типа монопольного доступа внутри приложения или что-то еще...
Курдль (2005-11-11 13:03:00) [1]
> Noosfert (11.11.05 13:02) [8]
> проблема наконец разрешилась.
Очень сильно в этом сомневаюсь :-(
Noosfert (2005-11-11 13:02:00) [2]Всем спасибо за советы и участие, проблема наконец разрешилась. База не должна быть локальной оказывается. Доступ через localhost спас :)
Digitman (2005-11-11 13:02:00) [3]
> Noosfert
3-хзвенка тебе нужна.
IBEvents - плохое решение
Курдль (2005-11-11 12:55:00) [4]В Вашем описании "клиент" - это человек?
В IB/FB есть инструментарий системных событий? Если нет, то не применить ли трехзвенку, где сервер приложений будет оповещать нужного клиента о наступлении события типа "пришло задание".
Noosfert (2005-11-11 12:43:00) [5]в базе есть таблица ExTable, которая отвечает за то что один клиент в неё кладет задание, а другой постоянно смотрит появились ли они эти задания, забирает их, выполняет и возвращает через базу результат.
Курдль (2005-11-11 12:39:00) [6]
> Zoostal (11.11.05 12:05)
Может быть все-таки объясните, зачем кому-то на клиенте периодически опрашивать базу?
Мне в жизни такое не приходило в голову, а вдруг я что-то важное упустил? :-(
Noosfert (2005-11-11 12:33:00) [7]Digitman
и TIBTransaction конечно тоже. Вот с такими параметрами
PJTrans.Params.Add('read_committed');
PJTrans.Params.Add('rec_version');
PJTrans.Params.Add('nowait');
Digitman (2005-11-11 12:31:00) [8]
> В обоих потоках идет динамическое создание подключения к
> БД, то есть создается TIBDataBase и свои TIBTable и TIBQuery
а TIBTransaction ?
Noosfert (2005-11-11 12:30:00) [9]Это был пример на чем все встает. При работе с запросами тоже встает.
Курдль (2005-11-11 12:24:00) [10]
> Проблема заключается в том что когда поток №3 начинает что-
> то класть в базу то все встает. То есть на строчке, например,
> PJExTable.Open;
Во-первых - ничего никогда не "класть в базу" с помощью...Table.Open;
А конечная-то задача какая? Что-то мне не ндравится При этом №1 опрашивает базу в цикле с определенной (частой переодичностью)