Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дескрипторы, Для чего они? 
:(
    Опции темы
NiJazz
Дата 11.8.2003, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Не могу понять, для чего нужны дескрипторы и что они из себя представляют, а также, как ими пользоваться. Что означает дескриптор handle confused.gif

Это сообщение отредактировал(а) Baa - 11.8.2003, 17:00
PM MAIL   Вверх
Sun
Дата 11.8.2003, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Дескриптор - это идентфикатор ресурса в операционной ситеме. У каждого открытого файла есть файловый дескриптор - целое число. Тоже самое с окнами - каждое окно имеет свой дескриптор. Используя дескриптор можно обращаться к ресурсу и управлять им (например операции чтения/записи в файле или изменение положения/размеров окна)
Тип данных: fpos_t
Это - тип объекта, который может кодировать информацию относительно файловой позиции потока, для использования функциями fgetpos и fsetpos.
В системе GNU, fpos_t эквивалентен off_t или long int. В других системах, он может иметь различное внутреннее представление.


--------------------
Account removed
PM MAIL   Вверх
RAN
Дата 11.8.2003, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Смысл handle'а кроется в его переводе на русский - ручка (в смысле ручка, например, дверная). Чтоб работать с каким-либо объектом надо передавать в функции его handle. Например, хочешь показать окно пишешь ShowWindow(<handle окна>, <как показать>). Физически handle - это указатель на структуру, динамически размещенную в памяти операционной системой. В этой структуре хранится вся информация об объекте (окне, контексте устройства, пере, кисти и чего-угодно) и его состоянии. Handle формируется ОС при создании объекта и возвращается функцией, создавшей объект.

HWND hWnd = CreateWindow(.......); //создали окно, в hWnd его дескриптор
HPEN hPen = CreatePen(......); //создали перо, в hPen его дескриптор
HDC dc = GetDC(hWnd); //спросили у ОС: "А какой дескриптор у контекста устройства окна с дескриптром hWnd?" :-) В ответ полусили этот дескриптор и поместили его в dc
HPEN hOldPen = SelectObject(dc, hPen); //Просим ОС рисовать на устройстве нашим пером. А дескриптор того пера, которое использовала ОС до этого, сохраняем в hOldPen
Ellipse(dc, 10, 10, 100, 100); //Рисуем выбранным пером на устройстве с дескриптором dc круг
//Теперь когда перо не нужно, можно удалить из памяти этот объект, но сначала надо вернуть устройству старое перо, иначе окно будет использовать для рисования не существующее перо
SelectObject(dc, hOldPen);
DeleteObject(hPen); //Windows освобождает память от структуры, описывающей наше перо. Передаём его дескриптор.
//Всё, конец проги, надо удалить окно
DestroyWindow(hWnd); //удалить окно с дескриптором hWnd

dc удалять нельзя, потому что не мы его создали, мы просто узнали его функцией GetDC. А создала его Windows в CreateWindow, и удалять его тоже будет Windows в DestroyWindow.

Для полного описания темы одного топика, конечно, мало, но суть такова.


Это сообщение отредактировал(а) RAN - 11.8.2003, 18:21
PM MAIL ICQ   Вверх
Kolia
Дата 12.8.2003, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



RAN Ну, ты молодец. Все раЗжевал. Даже я все понял наконеЦ-то. Тебе бы книги писать таким понятным языком (в отличИе от некоторых книг, где читаешь предложение и два часа его перевариваешь. Успех был бы гарантирован.

Это сообщение отредактировал(а) Baa - 12.8.2003, 12:00
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
<Spawn>
Дата 15.8.2003, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Цитата
Физически handle - это указатель на структуру, динамически размещенную в памяти операционной системой.


Небольшое уточнение. В книжке "Программирование графики для Windows" Фень Юань-я, сказано следующее.
Microsoft не стали возвращать указатель на обьект пользовательскому приложению. Возможно, это было сделано из тех соображений, что указатель несет слишком много информации для "умных" программистов - он выдает точное местоположение обьекта в памяти. Указатели позволяют выполнять операции чтения\записи с внутренним представлением обьектов, которые ОС предпочла бы скрыть от пользователя. Кроме того указатели затрудняют совместное использование обьектов из адресных пространств разных процессов.
Чтобы скрыть эту информацию от программистов, функции создания обьектов вместо указателя обычно возвращают манипулятор (Handle) обьекта.Манипулятор представляется как число, однозначно идентифицируещее обьект и может использоваться для косвенных ссылок на него.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.