Question

Hokay alors voici ce que j'essaie d'accomplir:

Je vais envoyer des données de maillage sur un réseau que mon rendu (programmé dans XNA) doit restituer. Pour ceux qui ne sont pas familiers, un "jeu" typique de XNA fonctionne essentiellement dans un fil continu ... qui met à jour et dessine vos données. Le problème est que je ne veux pas ralentir ce fil en ayant à désérialiser les données du réseau (cela réduirait le nombre d'images par seconde). Donc, je pense avoir besoin d'un thread qui écoute la connexion réseau, désérialise les paquets en quelque chose que le jeu peut utiliser, puis alerte le thread XNA que les données sont prêtes à être restituées. Ainsi, s'il y a un décalage ou autre sur le réseau, mon rendu est synchronisé avec les données du réseau.

Maintenant, je connais bien les principes de base du threading, mais je me demande si quelqu'un l'a déjà fait et que puis-je faire pour concevoir / mettre en œuvre cette chose? J'ai besoin de garder les threads séparés (c'est-à-dire que le thread XNA ne peut pas commencer à exécuter le code du thread d'écoute et vice versa). Je pense qu’il s’agit essentiellement d’un problème de consommateur producteur. Toutefois, si quelqu'un pouvait me fournir du code .NET / XNA (ou pseudocode) décrivant la synchronisation dont j'ai besoin, ce serait très apprécié.

N'hésitez pas à demander des éclaircissements ... Je vais essayer de le modifier au besoin.

Était-ce utile?

La solution

La méthode de dessin dans XNA est exécutée en tant que thread séparé et exécuté en permanence. En gros, il suffit donc d’écrire le nouveau maillage en objets dessinés que le dessin affichera lors de la prochaine passe. Sinon, si de nouvelles données ne sont pas encore disponibles, elles ne feront que restituer les anciennes mailles.

Ceci élimine le besoin de synchronisation avec le rendu réel, car le rendu sera probablement plus rapide que la mise à jour de ces variables de toute façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top