#include "StdAfx.h" #include "cola_asincrona.h" //************************************************************************** Ccola_asincrona::Ccola_asincrona(void) { strcpy(nombre, "Cola asincrona sin nombre"); time_sleep=20; m_thread=NULL; timers=NULL; pirate=FALSE; n_timers=max_timers=0; ultima_tarea=FALSE; tipo_u_tarea=0; } //************************************************************************** Ccola_asincrona::~Ccola_asincrona(void) { termina(); if (timers) { free(timers); } } //************************************************************************** void Ccola_asincrona::procesa(int tipo, BYTE* e ) { } //************************************************************************** void Ccola_asincrona::inicia( int size,int cap ) { tareas.inicia(cap,size+sizeof(int)); } //************************************************************************** BOOL Ccola_asincrona::add(int tipo,BYTE*e ) { return tareas.add(tipo,e); } //************************************************************************** void Ccola_asincrona::rum() { BYTE *tarea; BYTE *contenido; int *tipo; Timers_cola_asincrona *tim; while(!pirate) { //miramos si hay tarea-------------------------- t=_time64(NULL); for (int i=0; it+tim->ultimo<=t) { tim->ultimo=t; procesa(tim->tipo,NULL); } } tarea=tareas.get(); if (tarea) { tipo=(int*)tarea; contenido=&tarea[sizeof(int)]; procesa(*tipo,contenido); } else Sleep(time_sleep); } if (ultima_tarea) procesa(tipo_u_tarea,NULL); } //************************************************************************** void Ccola_asincrona::cuida() { if (max_timers<=n_timers+1) { max_timers+=10; if (timers) { timers=(Timers_cola_asincrona*)realloc(timers,max_timers*sizeof(Timers_cola_asincrona)); } else { timers=(Timers_cola_asincrona*)malloc(max_timers*sizeof(Timers_cola_asincrona)); } } } //************************************************************************** void Ccola_asincrona::on_timer( int t,int tipo ) { cuida(); Timers_cola_asincrona *tim=&timers[n_timers]; //Timers_cola_asincrona *tim=&timers[n_timers*sizeof(Timers_cola_asincrona)]; tim->t=t; tim->tipo=tipo; tim->ultimo= _time64(NULL); n_timers++; } //************************************************************************** void Ccola_asincrona::termina() { pirate=TRUE; join(); } //************************************************************************** void Ccola_asincrona::add_fin( int tipo ) { ultima_tarea=TRUE; tipo_u_tarea=tipo; } //**************************************************************************