Реализация диспетчера очереди печати

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

0

Решение

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]