我们有一个作业,我们必须使用链表实现打印机后台处理程序。我已经使用了STL的列表来实现所有内容。我可以让程序发送打印命令并维护文档的状态。问题是我不知道如何模仿/发送虚拟打印命令,以便打印文档。如果我使用 Sleep(),整个程序会有延迟,而我希望反手打印,其他用户可以访问该程序。关于我的问题,任何帮助将不胜感激,谢谢。
在真正的打印后台处理程序中,要么有多个线程(或者在Unix中,可能是fork
),要么系统使用"等待多个对象"类型的方法,当有东西要打印时,文档的一部分被发送到打印机,设置以便在该部分被"消费"时,一个可等待的对象是"准备好的"。然后后台处理程序等待发生某些事情(新作业或打印作业)。等待完成后,它将确定发生了什么。如果是新的打印作业,请将其排队,如果它是"一些打印完成",它会检查这是否是最后一次打印并完成作业,或者将更多内容发送到打印机。
在伪cdoe中,它可能看起来像这样:
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。