|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Потоки... Потоки... Очень Много Потоков...
Многопоточность... Это уже все понятно... В интернете куча примеров... Сам реализовывал такие программы... Находил что новое понимал... А вот сдесь столкнулся с реальной проблемой... И так...
Есть приложение которое должно выполнить цикл и создать ну например ~ 10000 потоков которые будут че то делать... Вот примерный пример кода: Код:
type TT = class(TThread) private URLRW: String; PSRW: String; PPRW: Integer; protected procedure Execute; Override; public property URL: String read URLRW write URLRW; property PS: String read PSRW write PSRW; property PP: Integer read PPRW write PPRW; end; procedure TT.Execute; begin Sleep(99999); end; procedure TMainForm.Button1Click(Sender: TObject); var T: TT; I: Integer; begin for I:=0 to 10000 do begin T:=TT.Create(True); T.FreeOnTerminate:=True; T.OnTerminate:=DoneTerminate; T.Resume; MainForm.Caption:=IntToStr(I); Application.ProcessMessages; end; end; В данном примере, поток создается и "СПИТ"... Создание идет до ~2000 потока хорошо а потом вылетает ошибка "Thread creation error: Недостаточно памяти для обработки команды"... Где то слышал что под поток Windows выделяет определенное количество памяти... Так вот... Если это так... Можно ли изменить это??? Например выделить больше памяти... Или меньше... Ну не верю я просто что 2Гб оперативной и 2Гб виртуальной памяти не хватает для 3000 потоков... Можно подсчитать... 4000Мб / 2000Потоков = 2Мб на пустой поток... Но если верить "диспетчеру задач"... То на 2010 созданных потоков, расходуется 21Мб оперативной и 51Мб виртуальной памяти... Так как же все таки изменить размеры памяти выделяемой для потока??? Или как создать например 20000 потоков??? Уверен "железо" позволяет... Буду рад Любым Мыслям... Заранее огромное спасибо... |