Dojo
09-01-2007, 11:47
Ciao a tutti,
sto realizzando un sistema di deformazione oggetti mediante l'uso di opengl. Focalizzando il problema, mi trovo in questa situazione: il thread 1 riceve in input utilizzando gli SPINNER_FLOAT 3 valori e li salva in una struttura; successivamente li invia mediante una socket UDP (quindi con la sendto) ad un secondo thread, il quale si occupa di ricevere la struttura dalla socket mediante la recvfrom, effettua una serie di operazioni e invia il risultato (un'altra struct, ma fingiamo che sia semplicemente un int).
Il primo thread è un thread opengl, quindi ha la glutMainLoop che ripete all'infinito la funzione display(). Il secondo è un puro thread di calcolo.
A questo punto, il primo thread effettua correttamente l'invio, il secondo (che è il server) si mette in attesa del risultato con un while (1) e utilizzando la recvfrom (BLOCCANTE) riceve, quindi calcola e invia mediante sendto. Il problema sorge ora, in quanto il client si mette in attesa di una risposta immediata del server, che non può arrivare perchè i calcoli richiedono qualche secondo; essendo la recvfrom bloccante (e quindi impedisce di mettere in ricezione il thread nella display()) il thread si ferma, la glutMainLoop non può piu loopare la display() e la finestra di disegno viene disegnata solamente a pezzi.
Suggerimenti?
Grazie :)
sto realizzando un sistema di deformazione oggetti mediante l'uso di opengl. Focalizzando il problema, mi trovo in questa situazione: il thread 1 riceve in input utilizzando gli SPINNER_FLOAT 3 valori e li salva in una struttura; successivamente li invia mediante una socket UDP (quindi con la sendto) ad un secondo thread, il quale si occupa di ricevere la struttura dalla socket mediante la recvfrom, effettua una serie di operazioni e invia il risultato (un'altra struct, ma fingiamo che sia semplicemente un int).
Il primo thread è un thread opengl, quindi ha la glutMainLoop che ripete all'infinito la funzione display(). Il secondo è un puro thread di calcolo.
A questo punto, il primo thread effettua correttamente l'invio, il secondo (che è il server) si mette in attesa del risultato con un while (1) e utilizzando la recvfrom (BLOCCANTE) riceve, quindi calcola e invia mediante sendto. Il problema sorge ora, in quanto il client si mette in attesa di una risposta immediata del server, che non può arrivare perchè i calcoli richiedono qualche secondo; essendo la recvfrom bloccante (e quindi impedisce di mettere in ricezione il thread nella display()) il thread si ferma, la glutMainLoop non può piu loopare la display() e la finestra di disegno viene disegnata solamente a pezzi.
Suggerimenti?
Grazie :)