2010-09-01 17 views
5

A menudo he oído hablar de "controladores", ¿qué son exactamente?¿Qué es exactamente "manejar"?

Editar: Por ejemplo, he oído acerca de: Windows maneja evento maneja archivo maneja

y así sucesivamente. ¿Son esas cosas lo mismo? ¿O son algunos términos abstractos?

+0

¿Cuál es el contexto en el que ha escuchado el término? Es un término muy general y tiene múltiples significados. –

+0

Posible duplicado de: http://stackoverflow.com/questions/1303123/what-is-a-handle-in-c –

Respuesta

5

Un identificador es una forma indirecta de hacer referencia a un objeto propiedad del SO o una biblioteca. Cuando el sistema operativo o una biblioteca posee un objeto pero quiere que un cliente se refiera a él, puede proporcionar una referencia a ese objeto llamado handle.

Los mangos se pueden implementar de diferentes maneras. Por lo general, no son referencias en el sentido C++ o C#. A menudo son punteros emitidos a algún tipo opaco, o pueden ser (o contener) un índice en una tabla de objetos que son propiedad del sistema operativo o la biblioteca.

Por ejemplo, en Windows, si crea una ventana, el sistema operativo crea un objeto que representa la ventana, pero no devuelve un puntero a ese objeto. En cambio, devuelve un identificador de ventana, que proporciona una capa adicional de direccionamiento indirecto. Cuando vuelve a pasar el identificador de ventana en otra llamada del sistema operativo, el sistema operativo sabe qué objeto de ventana usar en función del controlador. Esto evita que su código acceda directamente al objeto ventana.

La capa adicional de direccionamiento indirecto permite que el sistema operativo o la biblioteca hagan cosas como mover objetos, contar los objetos de referencia, y generalmente controlar lo que sucede con el objeto. Al igual que el modismo PIMPL, la implementación puede cambiar por completo sin perder la API original y, por lo tanto, no obliga a los clientes a recompilar. Es especialmente útil si está intentando ofrecer una API no orientada a objetos para clientes escritos en lenguajes de procedimiento como C.

1

Los identificadores son punteros a recursos no administrados como manejadores de archivos, identificadores de conexiones de bases de datos, manejadores de ventanas, etc. Como se manejan a recursos no administrados, en la mayoría de los casos no se recolectarán basura automáticamente y debe asegurarse de que libérelos o puede escuchar sobre fugas maneja.

+0

+1 En Windows OS comúnmente son 2 bytes de enteros y en el código administrado puede trabajar con ellos. IntPtr. – Jalal

+1

No son necesariamente indicadores, aunque pueden ser. Son identificadores opacos. –

5

Un "identificador" es otro nombre para una referencia a un recurso que es administrado por el programador explícitamente en lugar de automáticamente por el tiempo de ejecución.