📄 concurrentbrain.cpp.svn-base
字号:
#include "ConcurrentBrain.h"#include <semaphore.h>sem_t mailICCheio;LocalGoal mailBoxIC;string mailBoxIC2;LocalGoal mailBoxCI;pthread_mutex_t mutexCI;pthread_mutex_t mutexIC;/*! Esta � a thread cognitiva do time que sincroniza com o instintive thread complementando o raciocinio do agente. */void *cognitiveFunction(void* c){ Cognitive* cognitive = (Cognitive*)c; LocalGoal dadosCognitivo, dadosVindoDoInstintivo; string dadosVindoDoInstintivo2; bool emptyRulesBase = true; while(1) { //sleep(1); //Recebe informacao //cout<<"Recebendo informacao"<<endl; sem_wait(&mailICCheio); if ( emptyRulesBase ) { cout << "Iniciando sincronizacao" << endl; cognitive->loadRulesBase(); emptyRulesBase = false; } dadosVindoDoInstintivo = mailBoxIC; dadosVindoDoInstintivo2 = mailBoxIC2;//cout << endl << "Teste Cognitive(dados do instintivo): "<< dadosVindoDoInstintivo.current <<" "<< dadosVindoDoInstintivo.status << endl; //cout<<" > "<< mailBoxIC <<endl; //sleep(1); //Obs zerar o semaforo, caso o instintivo manda muitas msgs //sem_post(&mailICOcupado); //sleep(1); //processa regras cognitive->makeInference(dadosVindoDoInstintivo,dadosVindoDoInstintivo2); //cout<<"Processando regras"<<endl; dadosCognitivo = cognitive->getLocalGoal();//cout << endl << "Teste Cognitive (local): "<< dadosCognitivo.current <<", "<< dadosCognitivo.status << endl; pthread_mutex_lock(&mutexCI); mailBoxCI = dadosCognitivo; pthread_mutex_unlock(&mutexCI); } pthread_exit(0);}ConcurrentBrain::ConcurrentBrain():InferenceBrain(){ sem_init(&mailICCheio, 0, 0); localGoal.current = "none"; localGoal.status = "none"; cout << "inicializacao do concurrent brain" << endl;}Behavior* ConcurrentBrain::think( Formations* formations ){ if ( emptyRulesBase ) { instintive.loadRulesBase(); emptyRulesBase = false; } //cout<<"Processa regras"<<endl; pthread_mutex_lock(&mutexCI); dadosInstintivo = mailBoxCI; pthread_mutex_unlock(&mutexCI); //Processa regras// cout << "Dados vindos do cognitivo: "<< dadosInstintivo.current <<", "<< dadosInstintivo.status << endl; instintive.update(dadosInstintivo); outputMessage = instintive.makeInference(); //Envia informacao //cout<<"Enviando informacao"<<endl; pthread_mutex_lock(&mutexIC); mailBoxIC = instintive.getLocalGoal(); mailBoxIC2 = instintive.getBallLocalization(); pthread_mutex_unlock(&mutexIC); sem_post(&mailICCheio); return selectBehavior( outputMessage, formations );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -