Принтер нормально разделяется, если юзать стандартный API печати. Тогда всё идёт в первую очередь через DLL-драйвер и спуллер. А как оно потом идёт через драйвер порта - это уже не наши проблемы.
Если использовать для печати непосредственно команды принтеру, то работа будет идти, минуя весь слой разделения, и единственное, что останется - разделение самого порта. А за это отвечает, как уже было отмечено, флажки при открытии LPT в CreateFile() и сам драйвер. Вообще-то я сильно подозреваю, что драйверу наплевать на разделение: что ему послали, то он и передаст в порт. Так что ИМХО это нужно делать только флажками в CreateFile(), ну или всё писать одним вызовом WriteFile() - единый поток данных драйвер ИМХО точно не прервёт для другого потока данных. Впрочем, никто не мешает поэксериментировать - запустить пару-тройку экземпляров программы и понаблюдать.
Если использовать для печати непосредственно команды принтеру, то работа будет идти, минуя весь слой разделения, и единственное, что останется - разделение самого порта. А за это отвечает, как уже было отмечено, флажки при открытии LPT в CreateFile() и сам драйвер. Вообще-то я сильно подозреваю, что драйверу наплевать на разделение: что ему послали, то он и передаст в порт. Так что ИМХО это нужно делать только флажками в CreateFile(), ну или всё писать одним вызовом WriteFile() - единый поток данных драйвер ИМХО точно не прервёт для другого потока данных. Впрочем, никто не мешает поэксериментировать - запустить пару-тройку экземпляров программы и понаблюдать.