hola<br>en vez de utilizar una lista utiliza una cola del sistema operativo, la llamda es bloqueante, osea en vez de estar perdiendo tiempo y consumiendo cpu mirando si hay datos, se va a quedar durmiendo esperando los datos.<br>

<br><br><br><div class="gmail_quote">El 9 de marzo de 2010 12:15, pogui <span dir="ltr"><<a href="mailto:poguijuaz@gmail.com">poguijuaz@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Hola lista, tengo el siguiente problema:<br>
Tengo una porción de memoria dinamica (una simple cola) compartida entre cierta cantidad de threads, unos threads que atienden conecciones tcp/ip agregan datos a dicha estructura dinamica, y otro thread es el encargado de sacar datos y procesarlos.<br>


Ahora el problema es el siguiente, el thread encargado de sacar los datos de la estructura dinamica y procesarlos, dispara mi cpu al %100 ya que está en un bucle infinito checkeando que si hay datos nuevos a procesar segun el siguiente codigo:<br>


<br>
#include <stdio.h><br>
#include <stdlib.h><br>
#include <pthread.h><br>
<br>
#include "sistemStack.h"<br>
#include "tsmsp.h"<br>
<br>
SMSpNodo primero,ultimo; /* el stack de datos a procesar de ambito global*/<br>
pthread_mutex_t outBoxMutex; /*Mutex para proteger dicha memoria dinamica*/<br>
<br>
void* outBox(void* connfd) /*Thread encargado de sacar datos y procesarlos*/<br>
{<br>
   int done=1;<br>
   struct smsData* smsToSend;<br>
   printf("Thread del outBox lanzado...\n\n");<br>
     while(done)  /* el bucle que consume %100 de CPU en cuestión*/<br>
   {<br>
       pthread_mutex_lock(&outBoxMutex);<br>
       smsToSend=smsGet(&primero, &ultimo); /*Tratamos de sacar un dato de la cola  (estructura con datos  o un "0" si no hay datos q procesar)*/<br>
       pthread_mutex_unlock(&outBoxMutex);<br>
       if(smsToSend != 0) /* se encontró algun dato para procesar*/<br>
       {<br>
           printf("outBox: se detectó mensaje a enviar\n");<br>
           sendSMS(smsToSend);   /* Procesamos el dato*/<br>
       }<br>
   }<br>
<br>
   pthread_exit(NULL);<br>
}<br>
<br>
<br>
El codigo funciona bien, pero no esta bien que utilice tanto cpu, si comento el while todo regresa a la normalidad, pero dejo de procesar los datos.<br>
Hay alguna manera menos perjudicial de hacer esto?<br>
En que me estoy equivocando?<br>
<br>
Espero haber explicado bien el problema,<br>
Gracias por su tiempo.<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</blockquote></div><br><br clear="all"><br>-- <br> (\__/) <br>(='.'=)This is Bunny. Copy and paste bunny into your <br>(")_(")signature to help him gain world domination. <br><br>