Gracefully deactivate all dynamic objects before shutting down.

This commit is contained in:
Gunnar Beutner 2012-08-07 13:08:14 +02:00
parent 11fb9c541e
commit 21ea872651
3 changed files with 17 additions and 0 deletions

View File

@ -59,6 +59,8 @@ Application::~Application(void)
{
m_ShuttingDown = true;
DynamicObject::DeactivateObjects();
#ifdef _WIN32
WSACleanup();
#endif /* _WIN32 */

View File

@ -442,6 +442,20 @@ void DynamicObject::RestoreObjects(const String& filename)
}
}
void DynamicObject::DeactivateObjects(void)
{
DynamicObject::TypeMap::iterator tt;
for (tt = GetAllObjects().begin(); tt != GetAllObjects().end(); tt++) {
DynamicObject::NameMap::iterator nt;
while ((nt = tt->second.begin()) != tt->second.end()) {
DynamicObject::Ptr object = nt->second;
object->Unregister();
}
}
}
DynamicObject::TypeMap& DynamicObject::GetAllObjects(void)
{
static TypeMap objects;

View File

@ -116,6 +116,7 @@ public:
static void DumpObjects(const String& filename);
static void RestoreObjects(const String& filename);
static void DeactivateObjects(void);
static void RegisterClass(const String& type, Factory factory);
static bool ClassExists(const String& type);