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

在应用程序重新启动时将阵列保留在内存中 我有一个C++后端服务器应用程序。当我们的用户登录到应用程序时,为每个用户创建会话对象(包含数据库连接、访问权限、指针等的复杂C++对象)。然后在数组中维护该对象。我正在使用批处理脚本来重新启动应用程序,以防崩溃,c++,qt,memory,C++,Qt,Memory,问题是,如果应用程序崩溃,会话数组将被破坏。当应用程序再次启动时,数组为空。因此,用户需要再次登录 是否有任何方法可以在应用程序重新启动时保留会话数组 我使用的是Qt5.5框架,操作系统是Ubuntu Linux 代码: 静态QHash会话 课堂{ bool登录; QString-aID; QString-sID; QMap; QMap m_vars; 布尔m_数据库; 整数分钟; QTimer*m_sessionTimer; 布尔m_有效; CustomClass*CustomClass; C

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

是否有任何方法可以在应用程序重新启动时保留会话数组

我使用的是Qt5.5框架,操作系统是Ubuntu Linux

代码:

静态QHash会话
课堂{
bool登录;
QString-aID;
QString-sID;
QMap;
QMap m_vars;
布尔m_数据库;
整数分钟;
QTimer*m_sessionTimer;
布尔m_有效;
CustomClass*CustomClass;
CustomClass2*CustomClass;
QTimer*定时器;
QList对象;
}
定制类{
//15个getter setter函数。。。
CustomClassInterface接口;//PIMPL
}
CustomClassInterface{
数据库类数据库;
CustomUserClass用户类;
//…更多5-6个QList项目
}
海关类别2{
//15个getter setter函数。。。
CustomClass2接口;//PIMPL
}
CustomClass2接口{
数据库类数据库;
CustomUserClass用户类;
//…更多5-6个QList项目
}
...
这个类很大,所以我不能在这里写完整的代码

将序列化添加到所有类需要重写一堆库。因此,没有其他方法不实现序列化。像mmap之类的。

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

提示:分离关注点

您可以使用单独的过程来处理/存储凭据。

在创建/更新会话时,是否可以将会话保存在数据库/文件中?无论何时启动服务器,都要还原会话。

创建/更新会话时,能否将会话保存在数据库/文件中?无论何时启动服务器,都要还原它们。

我认为您希望在创建对象时序列化对象。可以发布会话类的结构吗?一种可能(更好)的方法是在DB表中保持登录状态,我不这么认为。在进程退出后,操作系统必须清理内存等资源。例外情况可能是共享内存/内存映射文件。使用resp写入/加载文件不是一个选项吗。数据?我想你想在创建对象时序列化它。你可以发布会话类的结构吗?一种可能(更好)的方法是在DB表中保持登录状态。我不这么认为。在进程退出后,操作系统必须清理内存等资源。例外情况可能是共享内存/内存映射文件。使用resp写入/加载文件不是一个选项吗。数据?这可能指向正确的方法,但是为了回答,考虑你甚至不写一个完整的句子…或者只是修复崩溃;如果进程也崩溃了?会话对象包含用户的大量数据,例如用户特定的数据库连接、指针、数据等,这些信息不能用IPC I通信,这可能指向正确的方法,但是为了回答,考虑一下,你甚至连一个完整的句子都写不出来…或者只是修复崩溃。如果该进程也崩溃了怎么办?会话对象包含大量用户数据,如用户特定的数据库连接、指针、,无法使用IPC进行通信的数据等,我认为这是最好的方法,因为应用程序似乎已经与DB建立了连接…可能在启动时重新构建会话对象无法做到这一点,由于会话对象是包含指针的复杂对象,并且很少有对象不支持序列化。@Antony那么您必须为它们添加序列化支持,因为您需要序列化它们。在最坏的情况下,需要进行更根本的更改。这是最好的方法,因为应用程序似乎已经与DB建立了连接…并且可能在启动时重新构建会话对象无法做到这一点,由于会话对象是包含指针的复杂对象,并且很少有对象不支持序列化。@Antony那么您必须为它们添加序列化支持,因为您需要序列化它们。最坏的情况是,需要进行更根本的改变。
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