首页 > 解决方案 > 如何在 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( );

重新启动后,检查两个文件之间的差异并加载丢失的队列元素和进程

但是,还有其他方法可以处理这种情况吗?

标签: c++filequeue

解决方案


推荐阅读