![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
HWND
sosv © (2003-04-17 14:06:00)Как (по какому правилу) Windows присваивает хэндлы окнам?
joisy (2003-04-21 12:25:00) [1]A razve v WinXP ogranicheniye na kolichestvo "okon" ne otodvinuto?
Внук (2003-04-21 08:58:00) [2]>>MBo © (19.04.03 18:31)
Понял :)
i-C3H7OH (2003-04-20 00:52:00) [3]>>Если верить Феню, после 12000 происходит исчерпание лимита. Это про GDI-объекты. Правда, сам не проверял :)
я проверял на ВинХР. там как повезет стабильный результат где-то 9950, часто больше 14000, а перья вообще 1 раз создались 62000 штук.
делал так:
var h:THandle; n:integer
n:=0;
while true do
begin
h := CreatePen(PS_SOLID, 1); //GetDC, CreateCompatibleDC
if h = 0 then break;
inc(n);
//сохраняем h в массиве, чтоб потом удалить культурно
end;
.
MBo (2003-04-19 18:31:00) [4]>Внук
исчерпание лимита на один процесс - чтобы остальные хоть как-то выкручивались
Внук (2003-04-19 14:51:00) [5]>>Игорь Шевченко © (18.04.03 12:23)
Если верить Феню, после 12000 происходит исчерпание лимита. Это про GDI-объекты. Правда, сам не проверял :)
Игорь Шевченко (2003-04-18 12:23:00) [6]C3H5(OH)3 (18.04.03 11:54)
> а таблица обьектов ГДИ по тому же принципу?
Да, только максимально количество объектов GDI - 16384 штуки, в отличие от объектов USER, которых может быть 65536 штук.
C3H5(OH)3 (2003-04-18 11:54:00) [7]Игорь Шевченко © (17.04.03 15:07)
вау! откуда знаешь? а таблица обьектов ГДИ по тому же принципу?
Игорь Шевченко (2003-04-17 15:16:00) [8]В дополнение: То, что я написал, относится к NT-системам (Win NT, Win 2k, Win XP). Как происходит работа с окнами и иными объектами user в Win9x я не знаю :)
Игорь Шевченко (2003-04-17 15:07:00) [9]i-C3H7OH © (17.04.03 14:52)
> наверное это индекс в какой-то внутренней таблице
Разумеется. Таблица находится в ядре и отображается через mapped-file для любого процесса, использующего user32.dll. В этой таблице хранятся адреса всех объектов user системы (19 разновидностей), младшее слово handle - это индекс в таблице, старшее - хэш-код (дополнительная страховка для исключения пересечения с хэндлами 16-битных программ (в них используется только младшее слово, так как размер handle для них - 16 бит)).
DVM (2003-04-17 14:53:00) [10]А после того, как объект перестал существовать, его номер хэндла ведь тоже может быть использован? Тогда уже не по порядку.
i-C3H7OH (2003-04-17 14:52:00) [11]наверное это индекс в какой-то внутренней таблице
Игорь Шевченко (2003-04-17 14:47:00) [12]Строго по порядку, начиная с единицы. Но хендлы присваиваются всем объектам user (меню, окна и еще много разных видов объектов) в порядке их создания.
sosv (2003-04-17 14:14:00) [13]Похоже на то
:)
DVM (2003-04-17 14:13:00) [14]от балды