Форум: "Прочее";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];
ВнизПотокобезопасно ли ADO? Найти похожие ветки
← →
Pit (2013-04-30 15:15) [0]Иными словами, если есть один TADOConnection, можно ли к нему параллельно обращаться из разных потоков со своими TADOQuery, допустим?
← →
Компромисс1 © (2013-04-30 15:19) [1]Each thread needs to have its own connection object. The following link provides more information: http://delphi.about.com/od/kbthread/a/query_threading.htm
Some key points from the article:
1] CoInitialize and CoUninitialize must be called manually before using any of the dbGo objects. Failing to call CoInitialize will result in the "CoInitialize was not called" exception. The CoInitialize method initializes the COM library on the current thread. ADO is COM.
2] You cannot use the TADOConnection object from the main thread (application). Every thread needs to create its own database connection.
http://stackoverflow.com/questions/3266532/ok-to-use-tadoconnection-in-threads
← →
Pit (2013-04-30 15:40) [2]странно как-то... 50 поток - значит, надо делать 50 коннектов к базе?
Некоршено как-то...
А с чем связано ограничение? Если прикрутить фичу, что ОДНОВРЕМЕННО два запроса не будет исполняться - можно ли использовать TADOConnection из разных потоков?
← →
Ega23 © (2013-04-30 15:46) [3]
> странно как-то... 50 поток - значит, надо делать 50 коннектов к базе?
Зачем? Пул коннектов - и нет проблем.
← →
Pit (2013-04-30 15:51) [4]
> Пул коннектов - и нет проблем.
то есть, ответ на мой пост [2] - утвердительный?Если прикрутить фичу, что ОДНОВРЕМЕННО два запроса не будет исполняться - можно ли использовать TADOConnection из разных потоков?
← →
sniknik © (2013-04-30 16:04) [5]без асинхронной работы нет одновременного выполнения, с асинхронной свои потоки "под запросы" не нужны...
← →
DVM © (2013-04-30 16:04) [6]
> Pit (30.04.13 15:51) [4]
> можно ли использовать TADOConnection из разных потоков?
Чтобы ответить на данный вопрос достаточно поглядеть код TADOConnection. Там куча ресурсов никак не защищены от одновременного обращения из разных потоков, следовательно, TADOConnection не потокобезопасный класс.
← →
Pit (2013-04-30 16:11) [7]
> с асинхронной свои потоки "под запросы" не нужны...
под запросы нет. Но поток может выполнять задачу, а в какой-то момент времени ему нужно обратиться к БД.
← →
Ega23 © (2013-04-30 16:23) [8]
> под запросы нет. Но поток может выполнять задачу, а в какой-
> то момент времени ему нужно обратиться к БД.
1. Создай свой собственный коннект
2. Используй свободный коннект в пуле.
3. Третьего не дано.
← →
Pit (2013-04-30 17:10) [9]Ega23, да понятно. Вопрос был в том, что ничего страшного, если DBConnection был создан в одном потоке, а Query связанный с ним выполняется в другом?
← →
Ega23 © (2013-04-30 17:31) [10]
> Вопрос был в том, что ничего страшного, если DBConnection
> был создан в одном потоке, а Query связанный с ним выполняется
> в другом?
Может и быть, CoInitialize надо на тред делать
← →
Pit (2013-04-30 17:37) [11]
> CoInitialize надо на тред делать
ну эт понятно...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c