实现打印机假脱机程序

时间:2013-09-15 08:46:03

标签: c++ c++11 linked-list spooler

我们有一项任务,我们必须使用链接列表实现打印机假脱机程序。我使用了STL的列表来实现一切。我可以让程序发送打印命令并维护文档的状态。问题是我不知道如何模仿/发送虚拟打印命令以便打印文档。如果我使用Sleep(),整个程序会有延迟。我希望反手打印,其他用户可以访问该程序。 任何帮助将不胜感激我的问题。

1 个答案:

答案 0 :(得分:1)

在REAL打印假脱机程序中,要么有多个线程(或者在Unix中,可能是fork),要么系统使用“等待多个对象”类型的方法,当有东西需要打印时,文档的一部分被发送到打印机,设置为当该部分被“消耗”时,一个可等待的对象“准备好”。然后假脱机程序等待发生的事情(无论是新工作还是打印)。等待完成后,它会确定发生了什么。如果它是一个新的打印作业,请将其排队,如果它是“某些打印完成”,它会检查这是否是打印的最后一个并完成作业,或者向打印机发送更多内容。

在伪语中,它可能看起来像这样:

for(;;)
{
   what = wait_for_work();
   switch (what)
   {
     case new_job:
       add_new_job();
       break;
     case print_write_done:
       if (document_complete)
          remove_current_job();
       else
          send_more_from_current_job();
       break;
     case spooler_terminate:
       exit(0);
     default:
       print_error_message();
   }
}

显然,如果没有看到你的代码,就很难说你应该如何实现它。但是,可以有一个计时器来模拟“以小块打印的文档”,例如,每100毫秒消耗10KB。