Можно ли выращивать и сжимать managed_ windows _shared_memory? Я пробую пример для managed_shared_memory от boost doc и это работа.boost interprocess managed_windows_shared_memory grow()
//Now that the segment is not mapped grow it adding extra 500 bytes
managed_shared_memory::grow("MyManagedShm", 500);
Но когда мой «MyManagedShm» - это Windows-родной серп, программа просто замерзает. Если я пишу
managed_windows_shared_memory::grow("MyManagedShm", 500);
компилятор говорит
no matching function to call
с примечанием
couldn't deduce template parameter 'ManagedMemory'
и покажите мне кандидата, который идеально подходит:
template<class ManagedMemory>
static bool grow(const char *filename, std::size_t extra_bytes)
{
typedef typename ManagedMemory::device_type device_type;
//Increase file size
try{
offset_t old_size;
{
device_type f(open_or_create, filename, read_write);
if(!f.get_size(old_size))
return false;
f.truncate(old_size + extra_bytes);
}
ManagedMemory managed_memory(open_only, filename);
//Grow always works
managed_memory.self_t::grow(extra_bytes);
}
catch(...){
return false;
}
return true;
}
Я не могу найти любую информацию в ускорительных документах, что это не возможно в окнах. Может быть, в окнах мне нужно форсировать сегмент unmap, прежде чем расти или сокращаться? Я не могу найти, как это сделать.
Если я пишу
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/managed_windows_shared_memory.hpp>
using namespace boost::interprocess;
int main() {
{ managed_windows_shared_memory msm(open_or_create, "mmap", 400); }
//{ managed_shared_memory::grow("mmap", 65535); }
{ managed_windows_shared_memory msm(open_only, "mmap"); }
}
Это бросить "файл не найден" на второй открытый.
, что делает «, когда это ж indows родной сегмент "даже означает? Это не должно быть * открытым * во время роста, очевидно – sehe
Остановить попытку поиска обходных решений, он не должен «замораживаться». Если вы найдете обходной путь, то он снова замерзнет. Сначала отключите защиту от вредоносных программ. Затем используйте отладчик, включите сервер символов, покажите нам трассировку стека. –
Я думаю, что он замораживается, потому что я вызываю grow() в том же {} -пространстве (я не знаю, как он звонит на английском языке), поэтому сегмент был сопоставлен. Если я сделаю это правильно - это исключение. Я думаю, из-за «windows_shared_memory не имеет стойкости ядра, и разделяемая память уничтожается, когда все процессы уничтожают все свои объекты windows_shared_memory и отображенные области для одной и той же разделяемой памяти или процессы завершают/сбой». И теперь я в замешательстве: у {} -пространства есть собственные процессы ?! – alebaster