Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 19.06.2017, 13:26   #11
Aoizora
Форумчанин
 
Регистрация: 11.11.2016
Сообщений: 79
Репутация: 10
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
У


Указатель, с кастомным удалятором. Но, кажется, unique_ptr не позволяет его задать. Тогда нужен класс-обвертка, который при удалении освободит ресурс. Напрямую хэндлы ресурса совать в указатель - очень плохая идея.
В unique_ptr кастомный удалятор задается вторым параметром при инстанцировании шаблона и инициализации.
Aoizora вне форума   Ответить с цитированием
Старый 19.06.2017, 13:31   #12
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 261
Репутация: 57
По умолчанию

Цитата:
Сообщение от Aoizora Посмотреть сообщение
В unique_ptr кастомный удалятор задается вторым параметром при инстанцировании шаблона и инициализации.
Тогда, теоретически в него можно хранить хендл бд ... но это рисковано и вобщем не переносимо, мало ли какой хендл будет через 10 лет? Вдруг захотите на ардуино запустить, где указатели 16 бит?
...вобщем не рекомендуется все это - сделать класс (можно и шаблон) - обвертку, который удаляет ресурс и имеет оператор приведения типа в него. А указатель уже на обвертку.
alexzk вне форума   Ответить с цитированием
Старый 19.06.2017, 14:12   #13
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 4,885
Репутация: 1442
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
удалить же забыли...
Вообще-то функция называется GetInstance - с чего бы там чего-то удалять? Да и вообще, суть была как из указателя получить ссылку.

Цитата:
Сообщение от alexzk Посмотреть сообщение
но это рисковано и вобщем не переносимо, мало ли какой хендл будет через 10 лет?
Какая разница? Функция удаления изменится так же как и хендл, так что все будет переносимо. То, что поменяется тип хендла нам по барабану.
waleri вне форума   Ответить с цитированием
Старый 19.06.2017, 14:13   #14
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 261
Репутация: 57
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Вообще-то функция называется GetInstance - с чего бы там чего-то удалять? Да и вообще, суть была как из указателя получить ссылку.
Ну раз память в ней распределена, то должна быть где-то и удалена. Танцы с указатель->ссылка->указатель->удаление как минимум плохо пахнут.
alexzk вне форума   Ответить с цитированием
Старый 19.06.2017, 23:54   #15
Aoizora
Форумчанин
 
Регистрация: 11.11.2016
Сообщений: 79
Репутация: 10
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
У


Указатель, с кастомным удалятором. Но, кажется, unique_ptr не позволяет его задать. Тогда нужен класс-обвертка, который при удалении освободит ресурс. Напрямую хэндлы ресурса совать в указатель - очень плохая идея.
Ок, указатель с кастомным удалятором заинтересовал меня. Так как я мало работал с БД, попробую различную архитектуру. Допустим, в базе много работников, и приложение должно расчитать какие-то сведения о них. То есть, по всей видимости, надо для каждого типа сотрудника создавать подкласс общего класса worker. Что делать с соединением с БД? При каждом инстанцировании подкласса открывать новое соединение, обернутое в unique_ptr? Насколько затратно по ресурсам открытие соединения?

Кроме того, может возникнуть такая проблема, что инстансов для работников будет много, и в каждом открыто свое соединение вместо использования одного глобального. Это очень нехорошо.
Aoizora вне форума   Ответить с цитированием
Старый 20.06.2017, 05:50   #16
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 261
Репутация: 57
По умолчанию

Я делал так...Запускаю поток, в его функции открываю соединение, дальше бесконечный цикл, с проверкой некого глобального атомарного флага-сигнала, что всем потокам в проге пора закончится.

В цикле переодически проверяю приватный мембер-очередь, есть ли че новое (синхр.), если нет - то спимс, если есть .. (можно сделать на conditional variable, тогда вообще ЦП есть не будет).

Вобщем в очередь засовывается "запрос" из другого потока, содержащий sql текст и лямбду-ответ. Поток исполняет запрос и вызывает лямбду с полученым ответом (т.о. лямбда в контексте этого потока, так что должна учитывать это, при обработке результата), и все повторяем.

Т.о. собссно само "соединение" у вас оказывается локальной переменной внутри ф. потока, и ваще ниче морочить не нада. Калбеки вот те, можно организовать через некие статики в этом же файле, которые доступны только потоку-исполнителю.

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

Последний раз редактировалось alexzk; 20.06.2017 в 05:55.
alexzk вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синглтон и паттерн. Что это такое и с чем его едят? (C#)) max_prorok Общие вопросы по программированию, компьютерным наукам 21 22.03.2016 15:59
Запрос с параметром Claster Помощь студентам 0 11.06.2012 11:44
Синглтон. Исключение при вызове метода через глобальную точку доступа. clions C# (си шарп) 3 13.04.2012 21:09
Цикл с параметром Гузеля Паскаль 2 21.03.2012 20:59
Синглтон megachuhancer Общие вопросы Delphi 0 11.05.2010 13:23




07:36.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru