2013-09-15 2 views
0

У нас есть назначение, в котором мы должны реализовать диспетчер очереди печати, используя связанные списки. Я использовал список из STL для реализации всего. Я могу заставить программу отправить команду печати и сохранить статус документов. Проблема в том, что я не знаю, как имитировать/отправить фиктивную команду печати, чтобы документ печатался. Если я использую Sleep(), во всей программе есть задержка. В то же время я хочу, чтобы печать на бэкханде и другие пользователи имели доступ к программе. Любая помощь будет оценена относительно моей проблемы.Реализация буферизатора принтера

+0

Итак, что именно вы просите? Как «притвориться, что что-то в процессе печати?» так что вы можете ставить в очередь несколько заданий и видеть, как медленно исчезают снова? –

+0

Нам не нужно использовать настоящий принтер. Просто тип фиктивной команды, поэтому программа знает распечатанные документы. – Bhatti7

+0

@MatsPetersson Да точно – Bhatti7

ответ

1

В РЕАЛЬНОМ диспетчере очереди печати есть либо несколько потоков (или в 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(); 
    } 
} 

Очевидно, что, не видя код, это трудно сказать, как вы должны его реализовать. Но можно было бы использовать таймер для имитации «документа, печатаемого небольшими кусками», скажем, 10 КБ потребляется каждые 100 мс, например.

Смежные вопросы