c++ - 如何在 C++ 中重新启动时处理队列中元素的丢失
问题描述
我正在使用一个队列来存储所需元素的值,如下所示
struct mq{
mq() : start_time(), end_time(), record_id(), evnt_name(), msg_q_src() {}
mq(int start_time, int end_time, int record_id, int evnt_name, int msg_q_src) : start_time(start_time), end_time(end_time), record_id(record_id), evnt_name(evnt_name), msg_q_src(msg_q_src) {}
int start_time;
int end_time;
int record_id;
int evnt_name;
int msg_q_src;
};
extern mq msg;
extern std::queue<mq> Mqueue;
我找到了一种可能的方法来保留队列而不会因重新启动而丢失
在处理之前将队列推送到文件
/* Push queue to file */
std::ofstream qoutfile;
qoutfile.open(qfilename,ios::app);
if(qoutfile.is_open()) {
cout << "opened file " << qfilename << " for writing" << endl;
qoutfile << Mqueue.front();
qoutfile << "\n";
cout << "check cat "<< qfilename << endl;
}else {
cout << "No File Present";
}
qoutfile.close( );
处理后将弹出的队列元素推送到另一个文件
/* popped queue to file */
std::ofstream poppedoutfile;
poppedoutfile.open(poppedqfilename,ios::app);
if(poppedoutfile.is_open()) {
cout << "opened file "<< poppedqfilename << " for writing" << endl;
poppedoutfile << Mqueue.front();
poppedoutfile << "\n";
Mqueue.pop();
cout << "check cat "<< poppedqfilename << endl;
}else {
cout << "No File Present "<< endl;
}
poppedoutfile.close( );
重新启动后,检查两个文件之间的差异并加载丢失的队列元素和进程
但是,还有其他方法可以处理这种情况吗?
解决方案
推荐阅读
- node.js - 如何让用户将他们的自定义域连接到我在 Google App Engine 上托管的 next.js 应用程序?
- html - 如何为列分配样式背景颜色的变量
- javascript - 我可以将变量发送到 Angular 中的文本常量吗?
- android - Android Matrix preConcat 还是 postConcat?
- javascript - 类型 'HTMLButtonElement' 不可分配给类型 'string'.ts(2322)
- python - Numpy 数组乘法行为不同于纯 Python 和 Cython
- mongodb - 当项目托管在 Heroku 上时,MongoDB 地图集不起作用
- java - 如何从其他类获取 Firebase 令牌?
- i2c - 通过 coreboot I²C DesignWare 从 EEPROM m24lc128 读取字节
- reactjs - Material UI:在页面左下角显示对话框