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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.