Вниз
Скачать: CL | DM;

Совместное использование TTable   Найти похожие ветки 

 
Alex_C   (2008-04-03 16:54) [0]

Вопрос: есть справочная таблица TTable. Ее одновременно могут использовать несколько тредов. Естественно возникает проблема, когда сразу несколько тредов к ней обращаются. Правильно ли я сделал такую ф-цию поиска, чтобы этого изизбежать:
procedure FindInTable(Table: TTable; CS: TRTLCriticalSection);
begin
 EnterCriticalSection(CS);
 try
   Table.First;
   // Чего-то там ищем
 finally
   LeaveCriticalSection(CS);
 end;
end;
Естественно критическая секция определена ранее одна для всех процессов.


 
Сергей М. ©   (2008-04-03 16:56) [1]


> TTable. Ее одновременно могут использовать несколько тредов


Если мне не изменяет память, не могут, даже при организации синхронного доступа.


 
Игорь Шевченко ©   (2008-04-03 16:57) [2]

многопоточное приложение для BDE должно следовать описанию в справке.

а правильно ты сделал или нет, тебе покажет твой собственный опыт.


 
Loginov Dmitry ©   (2008-04-03 22:51) [3]

> Правильно ли я сделал такую ф-цию поиска, чтобы этого изизбежать:


Нет. Не правильно. Для каждого треда необходимо создавать отдельно TDataBase, TSession и TTable/TQuery. Это намного проще, чем при твоем подходе ловить потенциальные глюки в дальнейшем. А они будут, особенно, если с TTable связаны какие-либо визуальные компоненты.


 
DrPass ©   (2008-04-03 23:48) [4]


> Если мне не изменяет память, не могут, даже при организации
> синхронного доступа

Через Synchronize должно получиться, в этом случае процедурка будет переключаться в контекст основного потока



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.015 c
2-1207054110
lamer
2008-04-01 16:48
2008.04.27
filename


15-1205093038
Константинов
2008-03-09 23:03
2008.04.27
Защита ПК на анлим подключении.


11-1188198341
Dodfr
2007-08-27 11:05
2008.04.27
popupmenu unexpected closing


15-1202555449
md10
2008-02-09 14:10
2008.04.27
Пропадает HDD


15-1205227500
Галинка
2008-03-11 12:25
2008.04.27
Как работать из под домена в командной строке




   Наверх