So I have this winsock application (a server, able to accept multiple clients), where in the main thread I setup the socket and create another thread where I listen for clients (listen_for_clients function). 
I also constantly receive data from a device in the main thread, which I afterwards concatenate to char arrays (buffers) of Client objects (BroadcastSample function). Currently I create a thread for each connected client (ProcessClient function), where I initialize a Client object and push it to a global vector of clients after which I send data to this client through the socket whenever the buffer in the corresponding Client object exceeds 4000 characters. 
Is there a way I can send data from the main thread to the separate client threads so I don't have to use structs/classes (also to send a green light if I want to send the already accumulated data) and also if I'm going to keep a global container of objects, what is a good way to remove a disconnected client object from it without crashing the program because another thread is using the same container?
struct Client{
    int buffer_len;
    char current_buffer[5000];
    SOCKET s;
};
std::vector<Client*> clientBuffers;
DWORD WINAPI listen_for_clients(LPVOID Param) 
{
    SOCKET client;
    sockaddr_in from;
    int fromlen = sizeof(from); 
    char buf[100];
    while(true)
    { 
        client = accept(ListenSocket,(struct sockaddr*)&from,&fromlen);
        if(client != INVALID_SOCKET)
        {
            printf("Client connected\n");
            unsigned dwThreadId;
            HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &ProcessClient, (void*)client, 0, &dwThreadId);
        }
    }
    closesocket(ListenSocket); 
    WSACleanup(); 
    ExitThread(0);
}
unsigned __stdcall ProcessClient(void *data)
{
    SOCKET ClientSocket = (SOCKET)data;
    Client * a = new Client();
    a->current_buffer[0] = '\0';
    a->buffer_len = 0;
    a->s = ClientSocket;
    clientBuffers.push_back(a);
    char szBuffer[255];
    while(true)
    {   
       if(a->buffer_len > 4000)
       {
          send(ClientSocket,a->current_buffer,sizeof(a->current_buffer),0);
          memset(a->current_buffer,0,5000);
          a->buffer_len = 0;
          a->current_buffer[0] = '\0';
       }
    }
    exit(1);
}
//function below is called only in main thread, about every 100ms
void BroadcastSample(Sample s)
{
    for(std::vector<Client*>::iterator it = clientBuffers.begin(); it !=  clientBuffers.end(); it++)
    {
        strcat((*it)->current_buffer,s.to_string);
        (*it)->buffer_len += strlen(s.to_string);
    }
}