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

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


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>Не обращай внимания. Это относится к компаудным документам (реализующим IOleObject и т.п.) и к самому IPersistFile не имеет отношения. Потому как моникера регистрации нет. Да и требовать от этого интерфейса не свойственных ему функций — несуразица. Хотя для своих объектов это и можно сделать.

Я как-то привык обращать внимание на то, что написано в документации С чего ты взял "к самому IPersistFile не имеет отношения"??? Ну не надо фантазий про компаундные документы, они в рассматриваемом случае ни при чем
Вот тебе пример из MSDN, раздел "Monikers and Persistence", учи матчасть.

STDMETHODIMP Gorilla::Load(const OLECHAR *pszFileName,
DWORD grfMode) {
// read in persisted object state
HRESULT hr = this->MyReadStateFromFile(pszFile, grfMode);
if (FAILED(hr)) return hr;
// get pointer to ROT from SCM
IRunningObjectTable *prot = 0;
hr = GetRunningObjectTable(0, &prot);
if (SUCCEEDED(hr)) {
// create a file moniker to register in ROT
IMoniker *pmk = 0;
hr = CreateFileMoniker(pszFileName, &pmk);
if (SUCCEEDED(hr)) {
// register self in ROT
hr = prot->Register(0, this, pmk, &m_dwReg);
pmk->Release();
}
prot->Release();
}
return hr;
}

_>>Что делать-то? Не может быть, чтобы ни у кого не возникало подобной проблемы.[/q]

Vi2>А по-моему тут нет никакой проблемы. Регистрация в ROTе имеет одну ссылку на объект.

Регистрация в ROT имеет сколько угодно ссылок на объекты с одним моникером.

Vi2>Пока сам объект не захочет убраться из системы, ROT его будет держать.


Это в случае strong reference (ROTFLAGS_REGISTRATIONKEEPSALIVE). Weak reference, которую я имел в виду, держать объект не будет.

Vi2>А кто уж его регистрит в ROT — это издержки проектирования. Главное — кто удалять будет!


Проблема с многозадачностью есть и при добавлении, и при удалении, причем, независимо от того, кто будет удалять. А вот решения не приведено, зачем трепаться тогда?

Эх, ну дадно, все понятно, буду сам думать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.