Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.018 c
7-36452
Алексей ВМ
2002-10-10 17:17
2002.12.12
To Александр Специлин.


1-36171
Berser
2002-12-04 00:50
2002.12.12
Модем и телефон


1-36191
DNT
2002-11-30 14:14
2002.12.12
Помогите начинающему


4-36467
Nick N A
2002-10-27 08:55
2002.12.12
Почему возникает ошибка в оконной процедуре ?


3-36001
Лесник
2002-11-23 00:23
2002.12.12
как создать таблицу в M$ Access 2000 используя ADO