Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.01;
Скачать: CL | DM;

Вниз

Проблема с FB 1.5 и IBX   Найти похожие ветки 

 
Zoostal   (2005-11-11 12:05) [0]

Здравствуйте!

У меня такая проблема. В программе создается 3 потока - №1 постоянно смотрит базу на предмет новых заданий, №2 получает задание от №1, выполняет его и пытается с помощью потока №3 положить результат в базу.

В общем с базой работают потоки №1 и №3. При этом №1 опрашивает базу в цикле с определенной (частой переодичностью), а поток №3 выполняет запись в базу редко (примерно раз в минуту). В обоих потоках идет динамическое создание подключения к БД, то есть создается TIBDataBase и свои TIBTable и TIBQuery.

Проблема заключается в том что когда поток №3 начинает что-то класть в базу то все встает. То есть на строчке, например,  

PJExTable.Open;

дальше код не исполняется. Если на время записи потоком №3 в базу данных поток №1 остановить с помощью Suspend то вроде все срабатывает, но это не вариант.

Как решить эту проблему ? Может быть есть какая-то настройка ? что-то типа монопольного доступа внутри приложения или что-то еще...


 
Курдль ©   (2005-11-11 12:24) [1]


> Проблема заключается в том что когда поток №3 начинает что-
> то класть в базу то все встает. То есть на строчке, например,
> PJExTable.Open;


Во-первых - ничего никогда не "класть в базу" с помощью ...Table.Open;

А конечная-то задача какая? Что-то мне не ндравится При этом №1 опрашивает базу в цикле с определенной (частой переодичностью)


 
Noosfert   (2005-11-11 12:30) [2]

Это был пример на чем все встает. При работе  с запросами тоже встает.


 
Digitman ©   (2005-11-11 12:31) [3]


> В обоих потоках идет динамическое создание подключения к
> БД, то есть создается TIBDataBase и свои TIBTable и TIBQuery


а TIBTransaction ?


 
Noosfert   (2005-11-11 12:33) [4]

Digitman

и TIBTransaction конечно тоже. Вот с такими параметрами

PJTrans.Params.Add("read_committed");
PJTrans.Params.Add("rec_version");
PJTrans.Params.Add("nowait");


 
Курдль ©   (2005-11-11 12:39) [5]


> Zoostal   (11.11.05 12:05)


Может быть все-таки объясните, зачем кому-то на клиенте периодически опрашивать базу?
Мне в жизни такое не приходило в голову, а вдруг я что-то важное упустил?  :-(


 
Noosfert   (2005-11-11 12:43) [6]

в базе есть таблица ExTable, которая отвечает за то что один клиент в неё кладет задание, а другой постоянно смотрит появились ли они эти задания, забирает их, выполняет и возвращает через базу результат.


 
Курдль ©   (2005-11-11 12:55) [7]

В Вашем описании "клиент" - это человек?
В IB/FB есть инструментарий системных событий? Если нет, то не применить ли трехзвенку, где сервер приложений будет оповещать нужного клиента о наступлении события типа "пришло задание".


 
Noosfert   (2005-11-11 13:02) [8]

Всем спасибо за советы и участие, проблема наконец разрешилась. База не должна быть локальной оказывается. Доступ через localhost спас :)


 
Digitman ©   (2005-11-11 13:02) [9]


> Noosfert


3-хзвенка тебе нужна.

IBEvents - плохое решение


 
Курдль ©   (2005-11-11 13:03) [10]


> Noosfert   (11.11.05 13:02) [8]
> проблема наконец разрешилась.


Очень сильно в этом сомневаюсь :-(



Страницы: 1 вся ветка

Текущий архив: 2006.01.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
6-1127234353
Galiaf
2005-09-20 20:39
2006.01.01
Проверка наличия сервера на определённом порте.


2-1134640643
Uzver
2005-12-15 12:57
2006.01.01
Как открыть файл?


3-1131699925
Zoostal
2005-11-11 12:05
2006.01.01
Проблема с FB 1.5 и IBX


3-1131694649
Карелин Артем
2005-11-11 10:37
2006.01.01
Обход ссылочной целостности в MS SQL 2000. Как сотворить?


14-1133737708
Kerk
2005-12-05 02:08
2006.01.01
Вывести числа от 1 до 100 без циклов и условий