Domanda

Hokay quindi ecco cosa sto cercando di realizzare:

Sto per inviare alcuni dati mesh su una rete che il mio renderer (programmato in XNA) deve rendere. Per coloro che non hanno familiarità, un tipico XNA "gioco". fondamentalmente viene eseguito in un thread continuo ... che aggiorna e disegna i tuoi dati. Il problema è che non voglio rallentare questo thread dovendo serializzare i dati di rete (ciò ridurrebbe il mio framerate). Quindi, sto pensando di aver bisogno di un thread che ascolta la connessione di rete, de-serializza i pacchetti in qualcosa che il gioco può usare, quindi avvisa il thread XNA che i dati sono pronti per essere renderizzati. In questo modo, in caso di ritardo o altro sulla rete, il mio rendering è sincronizzato con i dati di rete.

Ora, ho familiarità con i principi di threading di base, tuttavia mi chiedo se qualcuno lo abbia mai fatto prima e cosa posso fare per progettare / implementare questa cosa? Devo tenere separati i thread (ovvero, il thread XNA non può iniziare a eseguire il codice del thread di ascolto e viceversa). Sto pensando che questo sia essenzialmente un problema per il produttore, tuttavia se qualcuno potesse darmi del codice .NET / XNA (o pseudocodice) che delinea la sincronizzazione di cui ho bisogno, sarebbe molto apprezzato.

Sentiti libero di chiedere chiarimenti ... Proverò a modificarlo secondo necessità.

È stato utile?

Soluzione

Il metodo draw in XNA viene eseguito come thread separato che viene costantemente eseguito. Quindi, in sostanza, dovrebbe essere solo una questione di scrivere la nuova mesh in oggetti disegnati che il disegno renderà il passaggio successivo, altrimenti se i nuovi dati non sono ancora disponibili renderanno invece solo le vecchie mesh.

Questo elimina la necessità di sincronizzarsi con il rendering effettivo in quanto probabilmente il rendering sarà più veloce di quanto aggiorni comunque quelle variabili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top