Текущий архив: 2002.12.12;
Скачать: CL | DM;
Вниз
Размер стека потока Найти похожие ветки
← →
BSD (2002-10-31 10:07) [0]Подскажите плз как уменьшить размер стека у TThred-a, ведь по умолчанию 1Mb.
← →
Digitman © (2002-10-31 10:40) [1]Конкретно для код.потока, управляемого классом TThread - никак. Вызов BeginThread() жестко "прошит" в конструкторе класса, а поведением конструктора ты управлять не сможешь. По кр.мере - в Д5.
А что тебя так заботит этот вопрос ?
← →
BSD (2002-10-31 10:43) [2]Да вот забацал сервис, в котором создается много потоков,
так он больше 20 метров памяти и скушал, хотя памяти сама прога использует не очень много. Как то нехорошо получается:(
← →
Digitman © (2002-10-31 10:51) [3]
> так он больше 20 метров памяти и скушал
Ну и что ? да хоть 200 ! память-то аиртуальная)
Какие конкретные проблемы в связи с этим возникают ?
← →
BSD (2002-10-31 10:56) [4]Да в принципе никаких... Думал может как то уменьшить можно не делая свой TThread.
← →
Digitman © (2002-10-31 11:25) [5].. или пересмотреть концептуально необходимость и правильность использования большого числа доп.код.потоков в процессе
← →
Александр Спелицин © (2002-10-31 11:33) [6]Для вашего случая вмесно большого числа потоков подойдут порты завершения ввода-вывода. См. CreateIoCompletionPort, GetQueuedCompletionStatus, PostQueuedCompletionStatus. Правда в MSDN это толком не описано, так что рекомендую почитать Рихтера: Программирование серверных приложений для MS Windows 2000. Там это подробно описано.
← →
BSD (2002-10-31 11:51) [7]Необходимость пересматривал. Пока ничего лучше придумать не смог.
Насчет CreateIoCompletionPort, GetQueuedCompletionStatus, PostQueuedCompletionStatus почитаем. Спасибо!
← →
Сахаров Сергей (2002-10-31 13:11) [8]Перекрыть в наследнике класса конструктор (reintroduce), скопировать туда текст из стандартного конструктора TThread, изменить второй параметр функции BeginThread с 0 на нужное число.
Работать должно.
← →
Digitman © (2002-10-31 13:28) [9]>Сахаров Сергей
Ты хоть сориентировался бы по тексту, прежде чем давать заведомо невыполнимую рекомендацию)
Это даже скомпилировано не будет.
← →
Сахаров Сергей (2002-10-31 14:33) [10]Немного недописал, что нужно сделать до.
1) Для таких случаев (изменение поведения) я имею подправленную копию стандартных модулей. (Можете кинуть в меня чем-нибудь).
2) Делаю private -> protected (для доступа FNameField);
3) Нужные методы -> virtual (Create, например);
4) Декларации внутренних глобальных процедур -> в раздел interface ( в данном случае AddThread, ThreadProc);
5) Пользуюсь.
Получается не универсально, но терпимо.
← →
Digitman © (2002-10-31 15:30) [11]>Сахаров Сергей
Ради такой цели , коль уж модули править, достаточно всего лишь добавить в конструктор параметр, значение которого будет передано в BeginThread() в части указания о стеке.
← →
Сахаров Сергей (2002-10-31 16:10) [12]>Digitman
Тогда изменится стандартный интерфейс создания потоков на основе TThread, что не есть хорошо. Может возникнуть несовместимость с существующими классами и т.п. (если и там использовать модифицированный модуль).
← →
Digitman © (2002-10-31 16:27) [13]>Сахаров Сергей
Ну это - да, не спорю.
Есть, кстати, еще один вариант.
Не самый простой, наверно, но по кр.мере - без всякой "переделки" борландовских модулей.
Скажем, можно перехватить локально (в контексте тек.процесса) импорт/экспорт kernel-ф-ции CreateThread() и подставить там , в теле ф-ции перехвата, в кач-ве параметров все, что заблагорассудится.
Страницы: 1 вся ветка
Текущий архив: 2002.12.12;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.015 c