Ok so this is what your saying Dark:
I create two variables, lets say StartIndex and EndIndex, and every time I add a buffer to the queue I increment these values. So it might look something like this:
int StartIndex, EndIndex;
DWORD WINAPI FillOutput(LPVOID lpParameter)
{
char data[BUFFERSIZE];
int addrlen=sizeof(sin),a;
while(threadEnd == false)
{
if(StartIndex <= MAX_BUFFERS && EndIndex <= MAX_BUFFERS)
{
for(a=0; a<=(MAX_BUFFERS-Out); a++)
{
recvfrom(client,data,sizeof(data),0,(struct sockaddr*)&sin,&addrlen);
strcpy(OutQueue[a].data,data);
Out++;
}
StartIndex++;
EndIndex++;
}
}
return 0;
}