У нас есть задание, в котором мы должны реализовать диспетчер очереди печати, используя связанные списки. Я использовал список из STL, чтобы реализовать все. Я могу заставить программу посылать команду печати и поддерживать статус документов. Проблема в том, что я не знаю, как имитировать / отправить фиктивную команду печати, чтобы документ был напечатан. Если я использую Sleep (), то во всей программе будет задержка. Я хочу, чтобы печать выполнялась с обратной стороны, а другие пользователи имели доступ к программе.
Любая помощь будет оценена в отношении моей проблемы, спасибо.
В РЕАЛЬНОМ спулере печати либо есть несколько потоков (либо в 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 мс, например.
Других решений пока нет …