У нас есть задание, в котором мы должны реализовать диспетчер очереди печати принтера с использованием связанных списков. Я использовал список из STL для реализации всего. Я могу заставить программу отправлять команду печати и поддерживать статус документов. Проблема в том, что я не знаю, как имитировать / отправить фиктивную команду печати, чтобы документ был распечатан. Если я использую Sleep (), будет задержка во всей программе, в то время как я хочу, чтобы печать наотмашь и другие пользователи имели доступ к программе. Любая помощь будет оценена по моей проблеме, спасибо.
Реализация диспетчера очереди печати принтера
Ответы (1)
В НАСТОЯЩЕМУ диспетчере очереди печати либо есть несколько потоков (или в 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();
}
}
Очевидно, не видя своего кода, сложно сказать, как его реализовать. Но можно было бы иметь таймер для имитации «документа, печатаемого небольшими порциями», например, 10 КБ расходуется каждые 100 мс.