如何模拟打印队列生成和打印任务C ++?

时间:2017-12-08 04:44:07

标签: c++ printing

我编写了一个打印队列算法,该算法生成具有随机页数的打印作业,将打印作业插入优先级队列然后打印它们。该程序模拟具有1,2,3和4打印机的系统的打印时间。打印作业每30秒生成一次,打印作业以7页/分钟的速度打印。

我的程序存在的问题是,只有在第一个打印完成后才会创建新的打印作业,而不是每隔30秒继续生成新的作业,而之前的作业以7页/分钟的速度打印。我有时间模拟循环,每秒递增一次,但似乎没有像它应该控制时间。 如何同时控制两个功能的时间,以便在打印机打印时不会停止生成打印作业?

这是我的功能,每隔30秒创建一次打印作业:

void PrinterSim::startSimulation(int jobs, int printers)
{
  totalJobs = jobs; // total number of print jobs to generate
  numPrinters = printers;
  int tick = 1,
  jobInterval = 30; // generate new print job every 30 sec.
  for (int i = 0; i < totalJobs; i++)
  {
    int time = 0;
    while (time < jobInterval)
    time += tick;
    if (printers == 1)
    {
      // create new print job and insert into print queue
      // and into a vector storing jobs in the order they arrived
      PrintJob* newJob;
      newJob = new PrintJob;
      myQueue.setOrderReceived(newJob);
      myQueue.insertPrintQ(newJob);
    }
      else
    {
      // simulate same set of print jobs so get print job
      // from vector containing print jobs in order they arrived
      PrintJob* job = myQueue.getOrderReceived(i);
      myQueue.insertPrintQ(job);
    }
      // run simulation calls printerManager function
      runSimulation();
    }
  }

这是检查打印机状态并将打印作业发送到下一个可用打印机的功能:

void PrintQueue::printerManager(int printers)
{
  while (!printQueue.empty())
  {
    // check status of each printer
    if (printer1.printerAvail())
    {
      printer1.startPrint(printQueue.top());
      orderPrinted.push_back(printQueue.top());
      printQueue.pop();
    }
    // simulation running with 2 or more printers
    // make use of multiple printers while first one
    // is busy
    else if (printer2.printerAvail() && printers > 1)
    {
      printer2.startPrint(printQueue.top());
      orderPrinted.push_back(printQueue.top());
      printQueue.pop();
    }
    else if (printer3.printerAvail() && printers > 2)
    {
      printer3.startPrint(printQueue.top());
      orderPrinted.push_back(printQueue.top());
      printQueue.pop();
    }
    else if (printer4.printerAvail() && printers == 4)
    {
      printer4.startPrint(printQueue.top());
      orderPrinted.push_back(printQueue.top());
      printQueue.pop();
    }
  }
}

这是以7页/分钟的速度打印打印作业的功能:

void Printer::startPrint(PrintJob* current)
{
  int pages = current->getNumPages();
  // print rate in seconds, soit's the same rate as creating print jobs
  double printTime = (pages / PRINT_RATE) * 60; 
  int time = 0;
  int tick = 1;
  while (time < printTime)
  {
    time += tick;
    isFree = false; // printer is busy
  }
  totalTime += printTime / 60;
  isFree = true;
}

以下是查看完整计划的链接:https://onlinegdb.com/ryhudLDbz

示例输入:4(生成4个打印作业) 样本预期输出: 打印任务按此顺序到达: 87页 78页 16页 23页

打印任务按以下顺序打印: 87页 16页 23页 78页

打印任务应按照从最小到最大的顺序打印。

0 个答案:

没有答案