在应用程序重启时将数组保留在内存中

时间:2018-05-03 05:38:01

标签: c++ qt memory

我有一个C ++后端服务器应用程序。当我们的用户登录到应用程序时,会为每个用户创建一个SESSION对象(包含数据库连接,访问权限,指针等的复杂C ++对象)。然后将对象维护在一个数组中。我正在使用批处理脚本在发生崩溃时重新启动应用程序。

问题是,如果应用程序崩溃,SESSIONS数组将被销毁。当应用程序再次启动时,数组为空。因此,用户需要再次登录。

是否有任何方法可以在应用程序重启时保留SESSIONS数组?

我使用的是Qt 5.5框架,操作系统是Ubuntu Linux。

代码:

static QHash<QString,Session*> sessions

class Session {
bool logged_in;
QString aID;
QString sID;
QMap<QString,QMap>;
QMap<QString,QVariant> m_vars;
bool m_database;
int m_minutes;
QTimer* m_sessionTimer;
bool m_valid;
CustomClass* CustomClass;
CustomClass2* CustomClass;
QTimer* timer;
QList <CustomClass3*> objects;
}

CustomClass {
//15 getter-setter functions...
CustomClassInterface interface; //PIMPL
}

CustomClassInterface {
DatabaseClass database;
CustomUserClass userClass;
//...More 5-6 QList items
}

CustomClass2 {
    //15 getter-setter functions...
    CustomClass2Interface interface; //PIMPL
    }

    CustomClass2Interface {
    DatabaseClass database;
    CustomUserClass userClass;
    //...More 5-6 QList items
    }

...
The class is huge so I can't write the whole code here

向所有类添加序列化将需要重写一堆库。所以,没有实现序列化,没有任何其他方法。像mmap或其他东西。

2 个答案:

答案 0 :(得分:2)

提示:关注点分离 您可以使用单独的进程来处理/存储凭据。

答案 1 :(得分:2)

创建/更新会话时,您可以将会话保存在数据库/文件中吗?无论何时启动服务器,都要恢复它们。