Joel F a écrit :
à l'interieur d'une methode this vaut toujours quelqeu chose de non NULL ... C'est le principe de la RAII ..
Tu cherches à faire qqchose de bien alambiqué. Quel est el but recherché ?
|
En fait, c'est une classe Texture pour une application SDL/OpenGL. Le thread qui a ouvert le contexte OpenGL est malheureusement le seul à pouvoir charger/décharger une texture: je ne peux pas utiliser glXMakeCurrent ou similaire. Or, mes textures sont générées et mises à jour depuis l'extérieur par un autre thread, de manière asynchrone (en fonction de signaux échantillonnés via un FPGA).
La première question était liée à ceci:
Dans le thread de rendu, j'ai une std::queue qui contient les *texture à charger/décharger.
Dans le constructeur de la classe Texture, je push() le pointeur this dans la queue. Tout se passe très bien, le thread de rendu charge la texture et l'affiche.
Dans le destructeur par contre, j'ai un problème: si je push() aussi le pointeur this, le destructeur se termine et quand le thread de rendu voudra décharger le premier élément de la queue, celui-ci pointera vers "quelque-part".
Je n'ai pour le moment pas trouvé d'autre solution que d'envoyer une valeur à la place du *texture, ce qui rend les fonctions moins génériques.
On peut effectivement attendre dans le destructeur, mais delete() est bloquant.
Pour la deuxième question:
Si j'essaie de tracer une surface avec un *texture qui a été delete(), les choses se passent logiquement très très mal. Je voulais savoir si il y a un moyen propre et "automatique" de voir si mon *texture a été instancié ou si je dois maintenir une liste des textures qui ont été instanciées.
Message édité par 404 Not Found le 20-05-2009 à 02:47:42