Salve,

non ho messo in rilievo il linguaggio perchè ho bisogno più che altro di capire che procedura devo usare per realizzare un progetto software che ho in mente da un pò di tempo (a puro scopo dilettantistico!). Tuttavia è scontato dire che il linguaggio sarà C++ allacciato alle Win32 API.

Il software in questione vuole essere un semplice streaming server (http) composto da un processo principale (capturing/encoding thread) che catturando l'audio da un device wavein qualunque (built-in mic, missaggio stereo, sorgente esterna etc...) fa la conversione real-time in mp3 (Lame-end DLL) e appunto passa poi il tutto al piccolo server http che servirà clients RealPlayer, iTunes, WinAmp (simulando un header shoutcast/icy) secondo il metodo dell'endless download.

Sto programmando e mettendo appunto i vari pezzi del programma:

waveCapture.h
mp3Encoder.h
httpServer.h

più la GUI naturalmente. (ma per adesso il core mi accontento che sia anche solo consolle)

Il programma si divide in due thread principali: capturing/encoding e server.

Il problema che per adesso mi blocca è non sapere come passare i dati dal primo thread al secondo. Nel primo thread mi ritrovo ogni secondo con un certo numero di bytes (risultato dell'encoding mp3) pronti per essere passati al server (secondo thread).

Le soluzioni a cui avevo pensato erano:

1) il server http è in ascolto su due porte, una locale in UDP dove riceve i dati dal primo thread. La seconda porta è quella pubblica in ascolto in TCP dove smista i pachetti che gli arrivano dal primo thread. Il server http cmq è limitato, massimo 5 connessioni in contemporanea.

2) Il primo thread ed il server scrivono/leggono su una variabile o una serie di vector<buffer> in comune e magari potrei implementare una callback event. Tuttavia il problema principale é che entrambi i threads non devono essere bloccanti! Non posso aspettare a riempire un buffer con i dati dell'encoding perchè il server li sta ancora leggendo.

3) aiutatemi voi con qualche lampo di genio!

Grazie