リンクされたリストを使用してプリンタースプーラーを実装する必要がある割り当てがあります。STL のリストを使用してすべてを実装しました。印刷コマンドを送信し、ドキュメントのステータスを維持するプログラムを取得できます。問題は、ドキュメントが印刷されるようにダミーの印刷コマンドを模倣/送信する方法がわからないことです。Sleep() を使用すると、プログラム全体に遅延が発生します。一方で、バックハンドで印刷したり、他のユーザーがプログラムにアクセスできるようにしたりします。私の問題について何か助けていただければ幸いです。
2402 次
1 に答える
1
REAL 印刷スプーラでは、複数のスレッド (または Unix ではfork
.プリンター、その部分が「消費」されると、待機可能なオブジェクトが「準備完了」になるように設定します。次に、スプーラは何かが発生するのを待ちます (新しいジョブまたは印刷)。待機が完了すると、何が起こったかを判断します。新しい印刷ジョブの場合はキューに入れ、「一部の印刷が完了しました」の場合は、それが最後の印刷であるかどうかを確認してジョブを完了するか、さらに多くのものをプリンターに送信します。
pseudocdoe では、次のようになります。
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 ミリ秒ごとに 10 KB が消費されます。
于 2013-09-15T09:01:07.623 に答える