Re[2]: ROT и многозадачность
От: john_silver  
Дата: 28.05.03 09:11
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Здравствуйте, john_silver, Вы писали:


Vi2>

_>>Нигде не нашел информации. Как обеспечить interlocking при работе с ROT? Допустим, один процесс вызывает IMoniker::BindToObject, моникер лезет в IRunningObjectTable::GetObject и обнаруживает, что объекта там нет. Тогда он создает новый объект и вызывает для него Load. Внутри Load объект должен себя зарегистрить в ROT...

Vi2>Объект вообще не должен себя регистрировать в ROT — это не его задача. И дерегистрировать тоже. Это дело контейнера объекта (другими словами — его клиента).

Vi2>Это, действительно, туманное место для моникеров. Но к объекту никоим боком не относится — объект о РОТ ни сном ни духом.


Гм. Читаем в MSDN описание метода IPersistFile::Load ()
"When the object has been loaded, your implementation should register the object in the Running Object Table (see IRunningObjectTable::Register)."

Vi2>Моникер, ОТОН, тоже не обязан регистрировать объект в ROTе — у него есть для этого контекст. Но поиск в ROTе моникер делает, а регистрацию — нет.


Дык, это и так понятно. Не об этом вопрос.

Все это хорошо, но мне нужно практическое решение. Имеется сервер, реализующий COM объекты с уникальными именами. Нужно гарантировать создание только одного экземпляра объекта с определенным именем. Классическое решение — реализовать у объекта интерфейс IPersistFile и получать его экземпляр через File Moniker, в соответствии с описанным мной в первом постинге алгоритмом. Но как быть с многозадачностью?
Что делать-то? Не может быть, чтобы ни у кого не возникало подобной проблемы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.