0

リンクされたリストを使用してプリンタースプーラーを実装する必要がある割り当てがあります。STL のリストを使用してすべてを実装しました。印刷コマンドを送信し、ドキュメントのステータスを維持するプログラムを取得できます。問題は、ドキュメントが印刷されるようにダミーの印刷コマンドを模倣/送信する方法がわからないことです。Sleep() を使用すると、プログラム全体に遅延が発生します。一方で、バックハンドで印刷したり、他のユーザーがプログラムにアクセスできるようにしたりします。私の問題について何か助けていただければ幸いです。

4

1 に答える 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 に答える