std :: queue :: pop()未删除对象

时间:2019-03-14 05:58:53

标签: c++ queue std pop

我正在使用FCFS算法编写一个基本的单CPU调度程序。出于某种原因,当我尝试从队列中弹出突发时,实际上并没有将其删除。

功能如下:

void Simulator::io_burst(){
    //check the blocked pque for threads ready to be moved to 'ready', pop burst from burst queue
    while(blocked.top()->getBlockTime() <= totalTime && !(blocked.empty())){
        blocked.top()->updateState(3);
        Event* e = new Event(4, blocked.top(), blocked.top()->getBlockTime());
        events.push(e);
        printEvent(blocked.top()->getBlockTime(), e);
        cout << "IO TIME before" << blocked.top()->getBurstQ().front()->getIO() << endl;
        blocked.top()->getBurstQ().pop();
        cout << "IO TIME after" << blocked.top()->getBurstQ().front()->getIO() << endl;
        ready.push(blocked.top());
        blocked.pop();
    }
};

我在pop()之前和之后打印IO时间,每次都相同。

编辑:

这是getBurstQ()的定义:

queue<Burst*> Thread::getBurstQ(){
    return bursts;
};

然后关于条件,实际上,调用io_burst()的函数检查以确保其不为空,这也可能是多余的?但是,是的,我知道了,切换条件的顺序肯定更有意义。我现在这样调用该函数。

if(!blocked.empty()){io_burst();}

0 个答案:

没有答案