Вы можете просто создавать файлы с именем слова для печати, использовать findstr, который может печатать в цвете, а затем стирает файл. Попробуйте этот пример:
@echo off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
call :ColorText 0a "green"
call :ColorText 0C "red"
call :ColorText 0b "cyan"
echo(
call :ColorText 19 "blue"
call :ColorText 2F "white"
call :ColorText 4e "yellow"
goto :eof
:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof
Запустите color /?
, чтобы получить список цветов.
Сначала я советовал бы читать это: http://blogs.msdn.com/oldnewthing/archive/2007/03/01/1775759.aspx
затем http://blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
подводя итоги, ограничение обычно является стековым пространством (который должен быть в непрерывных блоках), и так как каждый поток использует, это рассеялось о Вас, быстро исчерпывает непрерывные блоки. На машинах на 64 бита и операционных системах это - намного меньше проблемы.
стратегии Смягчения существуют, но будут только идти до сих пор (и полагаться на Вас не использующий много стека на поток)
Как грубое руководство:
Вы, вероятно, не должны должны быть создавать больше чем десять так или иначе (и если Вы действительно делаете , потребность Вам уже должна знать эту информацию)
Примечание, что необходимо исследовать дизайн тесно, если Вы обеспокоены ударом этого предела!!!!!!!!
ответом на Ваш "Более важный Вопрос" того, что происходит, является OutOfMemoryException.
Не точно прямой ответ, но вот некоторый код для обнаружения предела. Это мог быть доступный зависимый памяти все же. Интересовался бы наблюдением других результатов ОС/CPU/мадам.
Не стесняются редактировать и включать Вашу машину:
Windows 7, VS2008, двухъядерная, мадам на 2 ГБ: 1,465 затем катастрофический отказ с OutOfMemoryException
int i = 0;
try
{
while (true)
{
new Thread(new ThreadStart(() => Thread.Sleep(int.MaxValue))).Start();
i++;
}
}
catch (Exception ex)
{
Console.WriteLine(i);
Console.WriteLine(ex.ToString());
}
Лучший ответ, который я услышал, когда задавание таких вопросов:
не имеет значения, и если Вы находите, что это действительно имеет значение, необходимо заново продумать то, что Вы делаете так, чтобы это не имело значения.
Действительно прочитайте сообщения в блоге Raymond Chen, на которые указал ответ ShuggyCoUk .
, Но обращают особое внимание на этот бит:
, Но реальный вопрос, который поднят каждый раз, когда кто-то спрашивает, "Каково максимальное количество потоков, которые может создать процесс?", "Почему Вы создаете столько потоков, что это даже становится проблемой?"
"один поток на клиент" модель известен для не масштабирования вне дюжины клиентов или около этого. Если Вы собираетесь быть обработкой больше, чем это многие клиенты одновременно, необходимо переместиться в модель, где вместо того, чтобы выделить поток клиенту, Вы вместо этого выделяете объект. (Когда-нибудь я буду размышлять относительно дуальности между потоками и объектами.) Windows обеспечивает порты завершения ввода-вывода и пул потоков, чтобы помочь Вам преобразовать от основанной на потоке модели до основанной на работе-объектом модели.
Насколько я понимаю целую модель потоков, она не должна была изменяться очень начиная с Win2K.
нет никакого реального предела потоков по сути, но больше предела стекового пространства процессов. Посмотрите всестороннее объяснение поточной обработки пределов от Raymond Chen для получения дополнительной информации об этом.