logo logo
Inicio arrow Portada
Wednesday, 19 de November de 2008
 
 
English English  Español Español  
Próximos Eventos
10.Jun. 2009

IWANN 2009
Salamanca, Spain
International Work-Conference on Artificial Neural Networks
11.Jun. 2009

Toward a Science of Consciousness
Hong Kong, China
15.Jun. 2009

International Workshop on Machine Consciousness
Hong Kong, China
15.Jun. 2009

The 8th IEEE International Conference on Cognitive Informatics
Hong Kong, China
22.Jun. 2009

IWINAC 2009
Santiago de Compostela, Spain
Work-Conference in the Interplay between Natural and Artificial Computation
Etiquetas
Análisis Artificial Associations Científicos Conciencia Consciencia Consciencia Artificial Conscientes Consciousness Howto Investigación Investigadores Microsoft Máquinas Publicaciones Researchers Reviews Robot Robotics Robots Servicios Studio artificial conciencia
Destacados
Contenido Reciente
Titulares RSS
 Conscious Robots RSS FeedFuente RSS de Conscious Robots
 
Liberado Robotics Developer Studio 2008
Will Browne
Actas del Nokia Workshop on Machine Consciousness
International Journal of Machine Consciousness
Cognitive Computation
Robótica Cognitiva y Conciencia Artificial
Introducción a CCR (Concurrency and Coordination Runtime) - Introducción al CCR Imprimir E-Mail
escrito por Ana Santos y Raúl Arrabales   
Wednesday, 30 de January de 2008
Índice
Introducción al CCR
Un Ejemplo Sencillo
Inicialización del CCR
Patrones Simples
Ejemplo de Interleave

Podemos incluir otro ejemplo, en el que se ve la utilidad de Arbiter.Interleave:


class SampleService
{
   Dispatcher dispatcher =
new Dispatcher(0, "Sample Service");
   DispatcherQueue taskQueue =
new DispatcherQueue();
   Port<
string> pState = new Port<string>();
   ServicePort pMain =
new ServicePort();
  
   ServicePort InitStatefull()
   {
        dispatcher.AddQueue(taskQueue);
        pState.Post(
"Hello");
        Arbiter.Activate(taskQueue,
        Arbiter.Interleave(
          
new TeardownReceiverGroup(Arbiter.Receive(false, pMain, Shutdown)),
          
new ExclusiveReceiverGroup(Arbiter.Receive(true, pMain, Update)),
          
new ConcurrentReceiverGroup(Arbiter.Receive(true, pMain, GetState)))
        );
      
return pMain;
   }
}


En este ejemplo vemos que se han seguido los mismos pasos que en el ejemplo anterior. La diferencia es que añadimos un método (InitStatefull()) que devuelve un objeto de la clase ServicePort y en él usamos Arbiter.Interleave, que nos proporciona garantías de protección hasta que el proceso halla terminado. Los tres parámetros que toma Interleave son:

- TearDownReceiverGroup: se añaden las tareas que hay que realizar sólo una vez al terminar todo.

- ExclusiveReceiverGroup: se ponen las tareas que se tienen que ejecutar en serie (sin concurrencia).

- ConcurrentReceiverGroup: se ponen las tareas que se pueden ejecutar en paralelo sin problemas (porque no tienen dependencias de datos entre ellas).

Un ejemplo más concreto del uso de Interleave sería el siguiente:


Port<WebResponse> responsePort = null;
Port<Exception> failurePort = null;
for (Int32 n = 0; n < c_ImageUrls.Length; n++)
{
   WebRequest webReq = WebRequest.Create(c_ImageUrls[n]);
   ApmToCcrAdapters.GetResponse(webReq, ref responsePort, ref failurePort);}

   Arbiter.Activate( dq, Arbiter.Interleave(
      
       new TeardownReceiverGroup (Arbiter.Receive (false, failurePort, delegate(Exception e)
                   {Msg("At least 1 GetResponse failed");})),

       new ExclusiveReceiverGroup(),

       new ConcurrentReceiverGroup(Arbiter.Receive(true, responsePort,delegate(WebResponse response)
                  {Byte[] data = new Byte[response.ContentLength];
                   response.GetResponseStream().Read(data, 0, data.Length);
                   Msg("RequestUri={0}", response.ResponseUri); })
    )));


Podemos comprobar en este ejemplo que en la llamada al método Interleave tenemos los tres parámetros citados anteriormente. En concreto, primero se crea una instancia de TeardownReceiverGroup, que ejecutará el receptor de la clase Arbiter una vez acabado todo. Si saltara la excepción, mostraría un mensaje por pantalla: "At least 1 GetResponse failed". En cuanto al segundo parámetro: ExclusiveReceiverGroup, no incluye ninguna tarea para ser ejecutada. Por último, el parámetro ConcurrentReceiverGroup, ejecutará el receptor del puerto de respuesta (responsePort), que no tiene dependencia con ningún dato.


Comparte tus dudas, comentarios o sugerencias en el Foro de Robotics Studio en Español.

 


Related Items:

  1. Páginas de Microsoft Robotics Studio
  2. Cómo encontrar artículos sobre consciencia y robótica
  3. Robótica Cognitiva y Conciencia Artificial
  4. Robótica Cognitiva
  5. Robots Polimórficos
  6. Microsoft Robotics Studio Octubre 2006 CTP
  7. Microsoft Robotics Studio Noviembre 2006 CTP
  8. Robotics Studio 1.0 Liberado
  9. Simulador RoboCup para Robotics Studio
  10. Robotics Studio 1.5 Mayo 2007 CTP

Add as favourites (60) | Cite este artículo en su sitio | Views: 1620 | E-Mail

  Sea el primero en comentar el artículo
RSS de los comentarios

Solo los usuarios registrados pueden agregar sus comentarios.
Por favor, vaya a login, o regístrese.



Modificado el ( Friday, 01 de February de 2008 )
 





¿Recuperar contraseña?
¿Quieres registrarte? Hazlo aquí
Destacamos

Páginas de MSRS (Microsoft Robotics Studio) de Conscious-Robots.com

Estas páginas contienen información, servicios MSRS, código C# y recursos de programación para robots reales y simulados usando MSRS. Estas páginas son de interés para cualquiera que trabaje en el campo de la robótica móvil. La mayoría del código incluido en esta sección está diseñado para su uso en proyectos académicos de robótica.

 

 
Encuestas
¿Puede Ser Consciente un Robot?
 
Categorías
Mensajes en el Foro
 
Top! Top!