powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: коннект в потоке
25 сообщений из 125, страница 5 из 5
Lazarus: коннект в потоке
    #39606307
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2_Vasilisk_Главный недостаток обоих способов, что для Send тоже нужно дополнительно выделять память
Хм. Занафига? Ведь пока Send не отработает, он не вернет управление, а значит, и строка не уничтожитсяПотому, что строка уничтожится в обработчике. Для Вашего способа это означает, что для Send нужно все-таки вызвать NewStr, для моего - произвести манипуляцию с обнулением ссылки
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39606317
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_Потому, что строка уничтожится в обработчике. Для Вашего способа это означает, что для Send нужно все-таки вызвать NewStr, для моего - произвести манипуляцию с обнулением ссылки
Хм. Если обработчик рассчитан на Send, то ничего ему уничтожать не надо. А вот если он и на Send, и на Post - тогда да.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39606327
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochможно легко написать на базе TQueue<T> - просто все методы доступа (положить в очередь, достать из очереди, проверить есть ли что-то в очереди и т.д.) обернуть через TMonitor или TCriticalSection
Не, я все-таки стараюсь придерживаться принципов бритвы Оккама. Для передачи одной строчки, числа или указателя на структуру городить целый раппер - по-моему, чересчур
white_niggerЦельно катаная апишная будет гибче анонимной?!
Я попытался в Queue публичной переменной сплэш-формы напрямую присвоить текст и получил в сеттере отлуп. Наверное не умею. Разбирательство отложил на потом
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39606335
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2А вот если он и на Send, и на PostЯ это и имел ввиду
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39606353
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокЯ попытался в Queue публичной переменной сплэш-формы напрямую присвоить текст и получил в сеттере отлуп. Наверное не умею. Разбирательство отложил на потомНе силён в лазаре. Но если сделаешь пример на делфе - могу глянуть что пошло не так.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39606402
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerНе силён в лазаре. Но если сделаешь пример на делфе - могу глянуть что пошло не так.
на D7 лазаревый код не взлетел, старшие версии лень ставить.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607557
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики, посоветуйте еще.

Где лучше создавать/разрушать компоненты доступа (TIBDatabase, TTransactions и проч.): в конструкторе/деструкторе потока или в execute потока?
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607566
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

Конечно же в Execute, ведь конструктор - это другой, "создающий" поток.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607569
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

без разницы где коннект создаётся. никогда проблем не было. лишь бы к нему во время работы не лезли из разных потоков.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607576
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonДок,

без разницы где коннект создаётся. никогда проблем не было. лишь бы к нему во время работы не лезли из разных потоков.Коннект - долгая операция. Смысл тогда делать запрос из бд в другом потоке, если коннект, который может быть даже дольше, чем выполнение запроса, будет в основном.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607577
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockmakhaonДок,

без разницы где коннект создаётся. никогда проблем не было. лишь бы к нему во время работы не лезли из разных потоков.Коннект - долгая операция. Смысл тогда делать запрос из бд в другом потоке, если коннект, который может быть даже дольше, чем выполнение запроса, будет в основном.

Расскажешь, как шарить контекст коннекта к БД FireBird между потоками?
Или ты снова как Мюллер, который помнит лишь как к нему Штирлиц за скрепками заходил?
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607610
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockКоннект - долгая операция. Смысл тогда делать запрос из бд в другом потоке, если коннект, который может быть даже дольше, чем выполнение запроса, будет в основном.
Я немного о другом. Я про создание экземпляра коннекта (типа, FDataBase:= TIBDatabase.Create(Application)) и инициализацию параметров (DatabaseName,LibraryName и т.д.). Хочется "разгрузить" код в Execute.

Единственное сомнение, создание экземпляра объекта обычно заворачивается в try..finally, а тут в случае ошибки создания finally выполнится только в деструкторе потока. Потому и спросил.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607705
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокYuRockКоннект - долгая операция. Смысл тогда делать запрос из бд в другом потоке, если коннект, который может быть даже дольше, чем выполнение запроса, будет в основном.
Я немного о другом. Я про создание экземпляра коннекта (типа, FDataBase:= TIBDatabase.Create(Application)) и инициализацию параметров (DatabaseName,LibraryName и т.д.). Хочется "разгрузить" код в Execute.

Единственное сомнение, создание экземпляра объекта обычно заворачивается в try..finally, а тут в случае ошибки создания finally выполнится только в деструкторе потока. Потому и спросил.
Без разницы, делай как удобнее. Коннект это не окно, которое автоматом "пристраивается" к создавшему его потоку.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607732
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДРасскажешь, как шарить контекст коннекта к БД FireBird между потоками?А зачем это? ТСу надо не это, ему надо изолированный в потоке коннект.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607738
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокХочется "разгрузить" код в Execute.Это делается по-другому, а не такими извращениями.
В Execute делается создание объектов (и удаление в finally, как ты хочешь), а между try и finally вызывается одна единственная функция - DoWork (или как хочешь назови этот статический метод).
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607785
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Как правило, всё таки сам запрос длиннее коннекта. Не знаю, может разве что в интернете как-то по-другому. В локалке коннект занимает сотни миллисекунд, насколько я видел. И редко какой запрос идёт быстрее, мне кажется.

авторРасскажешь, как шарить контекст коннекта к БД FireBird между потоками?

Ссылки, они же указатели, в помощь.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607789
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

а что мешает открыть коннект и не закрывать его? если он нужен постоянно. либо сделать пулл коннектов. у меня многопоточный пулл коннектов + ibquery занимает может строк 50 кода (раздаёт ibquery). правда, read only только. но мне как раз такой пулл нужен был.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607810
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

Сотни миллисекунд - все же сотни миллисекунд. Зачем основному потоку их тормозить (когда доп. поток создается для "работы с базой в доп. потоке"), остается непонятным.

И, да. В том же Firebird, если это 1-й коннект к базе (или не первый, но последний был "давно"), а база на десятки, сотни и т.д. гиг, то это будут совсем не сотни миллисекунд.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607814
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonYuRock,

а что мешает открыть коннект и не закрывать его? если он нужен постоянно. либо сделать пулл коннектов. у меня многопоточный пулл коннектов + ibquery занимает может строк 50 кода (раздаёт ibquery). правда, read only только. но мне как раз такой пулл нужен был.Все это прекрасно.
Не понятно только до сих пор, зачем для этого забирать у запускающего потока "сотни миллисекунд".

И, да, если у тебя пул - ты что, все его коннекты в конструкторе создаешь, что-ли? Сомневаюсь :)
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607815
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЭто делается по-другому, а не такими извращениями.
В Execute делается создание объектов (и удаление в finally, как ты хочешь), а между try и finally вызывается одна единственная функция - DoWork (или как хочешь назови этот статический метод).
Чувствую, что идеологически верно именно так, но уж больно велик соблазн создавать объекты на автомате в конструкторе потока, не заботясь об их судьбе (и не создавать новые поля объекта для сохранения переданных в Create параметров). Потому и спросил, как делают ТруЪ-программисты :)

зы. ты чего такой нервный с утра?
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607829
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonа что мешает открыть коннект и не закрывать его?
В принципе, ничего. Но я хочу попробовать реализовать логику на мемори-датасетах. Дернул сервер, отфетчил записи на клиента - сиди, работай.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607836
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

создаются по мере надобности. запросили, есть свободный коннект - выделился. нет - создался. как только не нужен - 'вернулся' назад в пулл.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607878
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonYuRock,

создаются по мере надобности. запросили, есть свободный коннект - выделился. нет - создался. как только не нужен - 'вернулся' назад в пулл.
Ну вот. Не в конструкторе же.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39607889
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокЧувствую, что идеологически верно именно так
Можно еще сделать класс TIBSingleConnectionThread, в котором будут
1. Созданы и в конструкторе сохранены "новые поля объекта для сохранения переданных в Create параметров"
2. В уже перекрытом Execute будет создаваться, стартовать и удаляться соединение в try finally, а так же после try будет вызываться абстрактный метод DoWork.
Докзы. ты чего такой нервный с утра?
Зуб заболел.
...
Рейтинг: 0 / 0
Lazarus: коннект в потоке
    #39608202
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockМожно еще сделать класс TIBSingleConnectionThread
Нафиг. Нарушается принцип бритвы Оккама :)
...
Рейтинг: 0 / 0
25 сообщений из 125, страница 5 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: коннект в потоке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]