logo logo
Home arrow Frontpage
Saturday, 11 October 2008
 
 
English English  Español Español  
Tag Cloud
Architectures Artificial Associations Books Brain Conscious Consciousness Forums Howto Machine Machine Consciousness Machines Microsoft Neuroscience Projects Publications Research Researchers Reviews Robot Robotics Robots Services Studio
Syndicate
 
AGI: Now is the Time
The Cognitive Approach to Conscious Machines
Sources of Consciousness
I Am a Strange Loop
The Making of the Memory
Theatre of the Mind
Introducción a CCR (Concurrency and Coordination Runtime) - Introducción al CCR Print E-mail
Written by Ana Santos y Raúl Arrabales   
Wednesday, 30 January 2008
Article Index
Introducción al CCR
Un Ejemplo Sencillo
Inicialización del CCR
Patrones Simples
Ejemplo de Interleave

Podemos poner un sencillo ejemplo de todo lo visto anteriormente: 

 


Port<int> portInt = new Port<int>(); // 1
portInt.Post(10); // 2
Console.WriteLine(portInt.ItemCount); // 3

Dispatcher dispatcher = new Dispatcher(0, "sample dispatcher"); // 4
DispatcherQueue taskQueue = new DispatcherQueue("sample queue", dispatcher);//5

Arbiter.Activate(taskQueue, Arbiter.Receive( false, portInt, delegate(int item)
{Console.WriteLine("Received item:" + item);})); // 6

port.Post(5); //7



La explicación del código anterior, es la siguiente:

1- Creamos un puerto que acepta instancias de tipo System.Int32 (int). 

2- Añadimos el número 10 al puerto usando el método Post().

3- Mostramos por pantalla el número de elementos que contiene el puerto.

4- Creamos un objeto de la clase Dispatcher con 0 hilos, esto lo que hace es que el CCR crea un hilo para cada CPU por defecto.

5- Se crea una instancia DispatcherQueue, (es decir, una cola de proceso), pasándole cómo parámetros el nombre “sample queue” y una referencia de la clase Dispatcher, creada anteriormente.

6- Realizamos una llamada al método Activate de la clase Arbiter, pasándole cómo parámetros: una referencia de la clase DispatcherQueue, creada anteriormente. Un nuevo elemento Arbiter (mediador), en este caso, al usar el método Receive, este mediador está a la escucha en el puerto “portInt”, creado también anteriormente. Además se pasa un delegado (o método anónimo), que será el encargado de la ejecución cuando se añada un elemento al puerto en cuestión.
 
Nota: El método Activate, sirve para registrar el Arbiter indicado.

7- El elemento (entero 5) ya se ha añadido al puerto, se pasa a la ejecución del delegado.

Cuando el elemento se ha enviado al puerto con un receptor, lo que ocurre dentro de la implementación del puerto es lo siguiente:

1- Se crea un contenedor para el valor fijado. La clase contenedor, IPortElement, permite que el CCR encole los elementos y asigne a cada elemento la tarea correspondiente, independientemente del tipo de elemento.
 
2- El contenedor es encolado.

3- Si la lista de recibidores no es nula y hay al menos un recibidor, el puerto podrá llamar al método ReceiverTask. Evaluate que decide, junto con el mediador, si el elemento puede ser consumido (es decir, ejecutado por el método o delegado especificado).

4- El puerto llama al método taskQueue.Enqueue con la tarea devuelta en la ejecución de Evaluate en el receptor.



Last Updated ( Friday, 01 February 2008 )
 





Lost Password?
No account yet? Register
Spotlight

Conscious-Robots.com pages for MSRS (Microsoft Robotics Studio)

These pages include information, MSRS services, C# sample code, and resources for the programming of real and simulated robots using MSRS. These pages can be of interest for anyone working on autonomous mobile robotics. Most of the code and applications included in this section is intended for its use in academic projects on robotics.

 

 
Polls
Can Robots Become Conscious?
 
Categories
Last Posts in Forum
 
Top!
Advertising links: Loan - Mortgage Calculator - Money - Credit Cards
Top!