|
|
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Василий №2_Vasilisk_Главный недостаток обоих способов, что для Send тоже нужно дополнительно выделять память Хм. Занафига? Ведь пока Send не отработает, он не вернет управление, а значит, и строка не уничтожитсяПотому, что строка уничтожится в обработчике. Для Вашего способа это означает, что для Send нужно все-таки вызвать NewStr, для моего - произвести манипуляцию с обнулением ссылки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 18:16 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Потому, что строка уничтожится в обработчике. Для Вашего способа это означает, что для Send нужно все-таки вызвать NewStr, для моего - произвести манипуляцию с обнулением ссылки Хм. Если обработчик рассчитан на Send, то ничего ему уничтожать не надо. А вот если он и на Send, и на Post - тогда да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 18:28 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Ariochможно легко написать на базе TQueue<T> - просто все методы доступа (положить в очередь, достать из очереди, проверить есть ли что-то в очереди и т.д.) обернуть через TMonitor или TCriticalSection Не, я все-таки стараюсь придерживаться принципов бритвы Оккама. Для передачи одной строчки, числа или указателя на структуру городить целый раппер - по-моему, чересчур white_niggerЦельно катаная апишная будет гибче анонимной?! Я попытался в Queue публичной переменной сплэш-формы напрямую присвоить текст и получил в сеттере отлуп. Наверное не умею. Разбирательство отложил на потом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 18:54 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Василий №2А вот если он и на Send, и на PostЯ это и имел ввиду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 19:10 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
ДокЯ попытался в Queue публичной переменной сплэш-формы напрямую присвоить текст и получил в сеттере отлуп. Наверное не умею. Разбирательство отложил на потомНе силён в лазаре. Но если сделаешь пример на делфе - могу глянуть что пошло не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 20:06 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
white_niggerНе силён в лазаре. Но если сделаешь пример на делфе - могу глянуть что пошло не так. на D7 лазаревый код не взлетел, старшие версии лень ставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 22:54 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Мужики, посоветуйте еще. Где лучше создавать/разрушать компоненты доступа (TIBDatabase, TTransactions и проч.): в конструкторе/деструкторе потока или в execute потока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 23:17 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Док, Конечно же в Execute, ведь конструктор - это другой, "создающий" поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2018, 23:40 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
Док, без разницы где коннект создаётся. никогда проблем не было. лишь бы к нему во время работы не лезли из разных потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 00:23 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
makhaonДок, без разницы где коннект создаётся. никогда проблем не было. лишь бы к нему во время работы не лезли из разных потоков.Коннект - долгая операция. Смысл тогда делать запрос из бд в другом потоке, если коннект, который может быть даже дольше, чем выполнение запроса, будет в основном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 03:04 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
YuRockmakhaonДок, без разницы где коннект создаётся. никогда проблем не было. лишь бы к нему во время работы не лезли из разных потоков.Коннект - долгая операция. Смысл тогда делать запрос из бд в другом потоке, если коннект, который может быть даже дольше, чем выполнение запроса, будет в основном. Расскажешь, как шарить контекст коннекта к БД FireBird между потоками? Или ты снова как Мюллер, который помнит лишь как к нему Штирлиц за скрепками заходил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 03:30 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
YuRockКоннект - долгая операция. Смысл тогда делать запрос из бд в другом потоке, если коннект, который может быть даже дольше, чем выполнение запроса, будет в основном. Я немного о другом. Я про создание экземпляра коннекта (типа, FDataBase:= TIBDatabase.Create(Application)) и инициализацию параметров (DatabaseName,LibraryName и т.д.). Хочется "разгрузить" код в Execute. Единственное сомнение, создание экземпляра объекта обычно заворачивается в try..finally, а тут в случае ошибки создания finally выполнится только в деструкторе потока. Потому и спросил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 09:06 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
ДокYuRockКоннект - долгая операция. Смысл тогда делать запрос из бд в другом потоке, если коннект, который может быть даже дольше, чем выполнение запроса, будет в основном. Я немного о другом. Я про создание экземпляра коннекта (типа, FDataBase:= TIBDatabase.Create(Application)) и инициализацию параметров (DatabaseName,LibraryName и т.д.). Хочется "разгрузить" код в Execute. Единственное сомнение, создание экземпляра объекта обычно заворачивается в try..finally, а тут в случае ошибки создания finally выполнится только в деструкторе потока. Потому и спросил. Без разницы, делай как удобнее. Коннект это не окно, которое автоматом "пристраивается" к создавшему его потоку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 11:09 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
чччДРасскажешь, как шарить контекст коннекта к БД FireBird между потоками?А зачем это? ТСу надо не это, ему надо изолированный в потоке коннект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 11:32 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
ДокХочется "разгрузить" код в Execute.Это делается по-другому, а не такими извращениями. В Execute делается создание объектов (и удаление в finally, как ты хочешь), а между try и finally вызывается одна единственная функция - DoWork (или как хочешь назови этот статический метод). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 11:36 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
YuRock, Как правило, всё таки сам запрос длиннее коннекта. Не знаю, может разве что в интернете как-то по-другому. В локалке коннект занимает сотни миллисекунд, насколько я видел. И редко какой запрос идёт быстрее, мне кажется. авторРасскажешь, как шарить контекст коннекта к БД FireBird между потоками? Ссылки, они же указатели, в помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 12:38 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
YuRock, а что мешает открыть коннект и не закрывать его? если он нужен постоянно. либо сделать пулл коннектов. у меня многопоточный пулл коннектов + ibquery занимает может строк 50 кода (раздаёт ibquery). правда, read only только. но мне как раз такой пулл нужен был. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 12:42 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
makhaon, Сотни миллисекунд - все же сотни миллисекунд. Зачем основному потоку их тормозить (когда доп. поток создается для "работы с базой в доп. потоке"), остается непонятным. И, да. В том же Firebird, если это 1-й коннект к базе (или не первый, но последний был "давно"), а база на десятки, сотни и т.д. гиг, то это будут совсем не сотни миллисекунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 13:06 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
makhaonYuRock, а что мешает открыть коннект и не закрывать его? если он нужен постоянно. либо сделать пулл коннектов. у меня многопоточный пулл коннектов + ibquery занимает может строк 50 кода (раздаёт ibquery). правда, read only только. но мне как раз такой пулл нужен был.Все это прекрасно. Не понятно только до сих пор, зачем для этого забирать у запускающего потока "сотни миллисекунд". И, да, если у тебя пул - ты что, все его коннекты в конструкторе создаешь, что-ли? Сомневаюсь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 13:09 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
YuRockЭто делается по-другому, а не такими извращениями. В Execute делается создание объектов (и удаление в finally, как ты хочешь), а между try и finally вызывается одна единственная функция - DoWork (или как хочешь назови этот статический метод). Чувствую, что идеологически верно именно так, но уж больно велик соблазн создавать объекты на автомате в конструкторе потока, не заботясь об их судьбе (и не создавать новые поля объекта для сохранения переданных в Create параметров). Потому и спросил, как делают ТруЪ-программисты :) зы. ты чего такой нервный с утра? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 13:09 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
makhaonа что мешает открыть коннект и не закрывать его? В принципе, ничего. Но я хочу попробовать реализовать логику на мемори-датасетах. Дернул сервер, отфетчил записи на клиента - сиди, работай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 13:25 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
YuRock, создаются по мере надобности. запросили, есть свободный коннект - выделился. нет - создался. как только не нужен - 'вернулся' назад в пулл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 13:29 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
makhaonYuRock, создаются по мере надобности. запросили, есть свободный коннект - выделился. нет - создался. как только не нужен - 'вернулся' назад в пулл. Ну вот. Не в конструкторе же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:22 |
|
||
|
Lazarus: коннект в потоке
|
|||
|---|---|---|---|
|
#18+
ДокЧувствую, что идеологически верно именно так Можно еще сделать класс TIBSingleConnectionThread, в котором будут 1. Созданы и в конструкторе сохранены "новые поля объекта для сохранения переданных в Create параметров" 2. В уже перекрытом Execute будет создаваться, стартовать и удаляться соединение в try finally, а так же после try будет вызываться абстрактный метод DoWork. Докзы. ты чего такой нервный с утра? Зуб заболел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:27 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39607889&tid=2041189]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 298ms |
| total: | 553ms |

| 0 / 0 |
