In einigen seltenen Fällen (in der Tat auf einem einzelnen Client-Computer) zu schaffen Code unten löst eine Ausnahme "library_error":boost :: interprocess_exception - library_error Ausnahme, wenn shared_memory_object
namespace ipc = boost::interprocess;
ipc::shared_memory_object m_shm;
...
bool initAsServer(size_t sharedMemSize)
{
ipc::permissions perm;
perm.set_unrestricted();
try
{
m_shm = ipc::shared_memory_object(
ipc::create_only,
CNameGenHelper::genUniqueNameUtf8().c_str(), // static std::string genUniqueNameUtf8()
ipc::read_write, perm);
}
catch(const ipc::interprocess_exception& ex)
{
logError("failed with exception \"%s\"", ex.what());
return false;
}
...
}
In Protokolldatei: [ERR] ist mit der Ausnahme "boost :: interprocess_exception :: library_error"
fehlgeschlagen Boost v1.58, Plattform win32, vs13.
werde ich sehr dankbar, wenn Sie mir helfen, dieses Problem zu lösen. Vielen Dank im Voraus!
Prüfen Sie, ob das Shared Memory-Segment bereits im System vorhanden ist? – Arunmu
Nein, dies ist nicht notwendig, da die Funktion CNameGenHelper :: genUniqueNameUtf8() einen eindeutigen Namen basierend auf der GUID generiert. Ich fügte der Protokolldatei hinzu, Fehlercodes über ex.get_error_code() und ex.get_native_error() für zusätzliche Ausnahmeinformationen zu erhalten. Jetzt warte ich auf Log-Dateien von der Client-Seite ... Vielen Dank für Ihr Interesse an diesem Problem! – Oleg
für aktualisierte Zeile in Catch: logError ("fehlgeschlagen mit Ausnahme"% s ", Fehler% d, nativer Fehler% d", ex.what(), ex.get_error_code(), ex.get_native_error()); --- In Protokolldatei: [ERR] fehlgeschlagen mit Ausnahme "boost :: interprocess_exception :: library_error" Fehler 1, nativen Fehler 0. --- Fehler 1 - system_error (von Enum error_code_t) Helfen Sie mir bitte ... – Oleg