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