From: Larry on 23 Jan 2010 13:39 [C++] Bounded Buffer(s) Hi, I am writing a little application to capture audio data from a wavein device and broadcast it to the internet over http protocol. My application is basically divided into two segments: Capturing Thread: -> waveCapture // waveCapture.h (class) -> mp3Encoding // mp3Encoder.h (class) Broadcasting Thread: -> httpServer // httpServer (class) So in a nutshell, the capturing thread is the "Producer" and the broadcasting thread is the "Consumer". In order to link them I need to code a buffer. The producer will put data on it whereas the consumer will retrieve data from it. I would like to post some code about the server (barebones) so I can get to the main point later on: unsigned int __stdcall handleClient(void* a) { Socket* s = (Socket*) a; while(1) { string r = s->ReceiveLine(); if (r.empty()) break; s->SendLine("Hello, I am the server!"); break; } // Disconnect s->close(); delete s; return 0; } int main() { // Server: set up SocketServer in(8000,5); while(1) { // Server: wait for incoming connections Socket* s=in.Accept(); cout << "a client connected..." << endl; // Server: spawn a new thread to deal with the client unsigned int ret; _beginthreadex(0,0,handleClient,s,0,&ret); } system("pause"); return EXIT_SUCCESS; } As you can see, the server waits for incoming connections and spawns a thread to deal with a single client each time it connects. Now, in the handleClient() thread I should retrieve data from the buffer (being written by the "producer") and send it to the client... Here comes the pain! Since I have to deal with several connections at the same time I don't know if they should read from one single buffer or something else...for instance the producer should write to severl instances of the buffer... any idea how I should work this out? thanks
From: Tim Roberts on 24 Jan 2010 22:24 "Larry" <dontmewithme(a)got.it> wrote: > > I am writing a little application to capture audio data from a wavein >device and broadcast it to the internet over http protocol. My application >is basically divided into two segments: You know, RTSP and RTP were designed for exactly this kind of thing. There's no point in reinventing the wheel here. >As you can see, the server waits for incoming connections and spawns a >thread to deal with a single client each time it connects. > >Now, in the handleClient() thread I should retrieve data from the buffer >(being written by the "producer") and send it to the client... > >Here comes the pain! Since I have to deal with several connections at the >same time I don't know if they should read from one single buffer or >something else...for instance the producer should write to severl instances >of the buffer... This depends on how you want to handle network latencies. In my view, you would have one single buffer, with one producer and multiple consumers. You just have to make sure you handle the case where one consumer gets behind and the buffer pointers wrap around. -- Tim Roberts, timr(a)probo.com Providenza & Boekelheide, Inc.
|
Pages: 1 Prev: cannot apply vs2005 sp1 Next: Using std::equal with an empty set. |