Problème de pointeur sur plusieurs threads
Bonjour,
J'ai une application composé de 2 threads (render et réseau).
Afin d'éviter les appels aux fonctions render par le thread réseau, j'essaye de créer une task queue.
Mais j'ai un problème de pointeur que je n'arrive pas à comprendre.
Ma classe Main crée la task_queue (allocation dynamique). Main crée ensuite la classe network en lui passant le pointeur de la task_queue.
Jusque là tout va bien.
Ma classe network lance ensuite le thread d'écoute, et quand elle reçoit un paquet crée une tâche, et essaye de la donner à la task_queue, mais le pointeur est invalide (même pas nul, un if(ptr) crée une erreur).
Donc en code vite fait (c'est pas mon code) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Main {
TaskQueue* task_queue;
Network* net;
Main() {
task_queue = new TaskQueue();
net = new Network(task_queue);
}
}
class Network {
TaskQueue* task_queue;
Network(TaskQueue* p_queue) {
task_queue = p_queue;
}
void run() { // thread different
while(true) {
socket->read(buffer);
if(task_queue) // <- crash
task_queue->addTask(new Task(buffer));
}
}
} |
Merci d'avance pour vos réponses.