Господа, у меня тормоз...
Дано:
а) основное приложение (MainApp) и длл (DllApp), которая подгружается в основное приложение динамически
2) отдельная либа (UsedClasses), в которой находится класс (mainContainer), используемый обоими приложениями из а). При этом класс изобилует статическими объектами (и это уже не изменить - с этим надо жить)
3) если в основном приложении MainApp произошли изменения объекта типа mainContainer, то этот обновленный объект должен быть передан длл-лине, т.е. ее объект должен быть изменен ( т.о. у длл-лины будет копия объекта из MainApp). [ ну или наоборот - изменения в длл-лине д.б. переданы основному приложению]
4) Для того, чтобы иметь возможность копировать данные, решила применить shared memory (CreateFileMapping, OpenFileMapping, MapViewOfFile ).
Сразу же оговорюсь, я еще не знаю, будет ли это на 100% работать
Проблема:
Выяснилось, что после того, что в shared memory был создан файл и туда помещена инфа, файл нельзя закрывать, иначе при попытке считывания файл не находится.
Ладно, значит, надо как-то остановить функцию записи в файл до тех пор, пока оттуда не будет все считано.
Т.е.:
void DllTestClass::writeInSharedMemory()
{
CreateFileMapping();
MapViewOfFile();
CopyMemory();
!!!!!!!!!!!!!!!!!!
вот тут надо как-то прерваться, пока получатель не считает данные:
т.е. посадить блокировку, которую снимет получатель, и ждать, пока это
произойдет
!!!!!!!!!!!!!!!!!
UnmapViewOfFile();
CloseHandle();
}
void readFromSharedMemory()
{
OpenFileMapping();
MapViewOfFile();
CloseHandle(); // это уже спорно...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
тут снять блокировку
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
Вопрос - как??? У меня уже полный тормоз...