Tom wrote:
> Хочу ещё добавить, что проблемма сильно усложняется, если обьект живущий в потоке — не синглтон.
Непонятно, что имеется ввиду под данным заявлением.
Возможные варианты:
Один объект, один поток. Код приводился, нет проблем.
Один объект, пул потоков. Методы объекта должны быть thread-safe, больше проблем нет.
Несколько объектов, один поток. Смысла большого нет, но реализуется в точности как п.1.
Несколько объектов, пул потоков. В точности, как п.2.
-- Maxim Yegorushkin
Недавно реализовывал подобную вещь как сервис/драйвер винды. Объект создаётся в процессе services.exe или driver.exe, все вызовы методов происходят через DeviceIoControl. В данном случае можно обойтись даже без мощного марашаллинга, поскольку на время вызова процесс объекта разделяет память вызывающего процесса. О, как.
В общем, работает весьма приятно, только с отладкой несколько сложновато.
Кстати, хотелось бы узнать, может есть уже какие-то отработанные технологии для использования объектов размещенных в сервисе, например на основе ATL ?
А, вот ещё: а почему вас собственно не устраивает COM Exe Server ?
Здравствуйте, Chez, Вы писали:
C>А, вот ещё: а почему вас собственно не устраивает COM Exe Server ?
А почему он собственно должен устраивать?
Он плохо подходит на эту роль.
Это решение плохо переносимо да и чтобы добиться нужного поведения
придется еще довольно много повозиться.
Пихать в приложение довольно толстую прослойку из COM
только ради активных объектов я бы не стал.
Ну и наконец все это довольно элегантно реализуется средствами С++
с помощью boost (см. пост от MaximE).
Здравствуйте, Tom, Вы писали:
Tom>Хочу ещё добавить, что проблемма сильно усложняется, если обьект живущий в потоке — не синглтон.
А почему это усложняет жизнь?
Вроде никаких проблем из-за "несинглтонности" нету.
Другое дело, если он является noncopyable
и есть желание копировать такие объекты направо и налево.
Тогда да, ситуация усложняется.
А создавать такие объекты с нуля можно без проблем в любом количестве.
Другое дело, если он НЕ является noncopyable
и есть желание копировать такие объекты направо и налево.
Re: обьект живущий в отдельном потоке
От:
Аноним
Дата:
15.02.05 09:38
Оценка:
Здравствуйте, gid_vvp, Вы писали:
_>Hi, All.
_>Может немного не по теме форума... _>Но я не знаю куда запостить этот вопрос.
_>Необходимо сделать так чтобы некий объект (класс) полностью жил в отдельном потоке, т.е. чтобы все вызовы функций данного класса происходили в контексте его потока, даже если они вызываются из других потоков.
_>Возможно немного запутанно... _>Но надеюсь на помощь.
Не задана операционная система, но для Windows надо вызывать функции через посылку сообщения потоку, в котором живет объект.
Именно так устороен объект модели Apartment технологии COM.
Поэтому можно использовать ATL для создания обьекта и его методов или даже Visual Basic 6.
Однако, в этом случае не избежать потерей в быстродействии из-за маршалинга.
Ы
Здравствуйте, vvaizh, Вы писали:
V>Взамен — хочу ответ на вопрос, где вы хотите это применить? V>( V>а) состояние графического редактора V>б) контекст сессии для web-сервера V>в) синтаксический парсер V>г) что то новое.. V>)
Пишу класс для работы с контроллером станка, а драйвера имеют
особенность: с ними можно работать только из одного потока, а
приложение подразумевается многопоточное.