2010-12-16 48 views
5

Soy nuevo con C++ pthreads. Lo que trato de hacer es usar un hilo para atrapar paquetes UDP y ponerlo en una cola, y otro para procesarlos y enviarlos después. Mi pregunta es, ¿cómo puedo insertar/extraer elementos en/desde un contenedor en un hilo separado?Referencia no definida a la cola estática

He aquí un ejemplo:

#include <queue> 
#include <iostream> 
#include <pthread.h> 
#include <signal.h> 

class A{ 
public: 
    A(){ 
     pthread_create(&thread, NULL, &A::pushQueue, NULL); 

     pthread_join(thread, NULL); 
    } 
    virtual ~A(){ 
     pthread_kill(thread, 0); 
    } 

private: 
    static void* pushQueue(void* context){ 
     for(int i = 0; i < 10; i++){ 
      bufferInbound.push(i); 
      std::cout << i << " pushed!" << std::endl; 
     } 
    } 

    static std::queue<int> bufferInbound; 
    pthread_t thread; 
}; 

int main(){ 
    A* a = new A(); 

    return 0; 
} 

Cuando compilo, me da el siguiente resultado:

[email protected]:~/$ make 
g++ -g -lpthread main.cpp -c 
g++ -g -lpthread main.o -o this 
main.o: In function `A::pushQueue(void*)': 
/home/U53R/main.cpp:20: undefined reference to `A::bufferInbound' 
collect2: ld returned 1 exit status 
make: *** [make] Error 1 

Gracias por ayudar.

Respuesta

9

necesita inicializar el miembro estático, agregar std::queue<int> A::bufferInbound; después de la clase o moverlo dentro de su función.

+3

Sí. Además, este problema no tiene nada que ver con los hilos. (OP necesita un poco de bloqueo allí, sin embargo). – zwol

+0

¡Gracias! Está funcionando ahora. – Vargeux

Cuestiones relacionadas