Я бы начал примерно так:
class My_socket {
SOCKET socket;
Mutex mutex;
void write(...);
void read(...);
};
void My_socket::write(...)
{
mutex_wait(mutex);
int r = write(socket,...);
mutex_release(mutex);
if (! r)
throw("Нимагу писать фсокет!");
}
void My_socket::read(...)
{
mutex_wait(mutex);
int r = read(socket,...);
mutex_release(mutex);
if (! r)
throw("Нимагу фтыкать сокет!");
}
/*******************/
class My_thread {
My_socket * my_socket;
Thread thread;
My_thread(My_socket * new_my_socket):my_socket(new_my_socket),thread(0) {};
~My_thread() { if (thread) terminate(thread);};
void launch();
};
void My_thread::launch()
{
thread = create_thread(...);
if (!thread) throw("хрентам");
}