Проще простого:
Код:
class Thread
{
HANDLE hthread;
static __stdcall gmain(Thread* thr)
{
try
{
thr->main();
}
catch(...)
{
abort();
}
}
public:
Thread() : hthread() {}
~Thread() {CloseHandle(hthread);}
void start()
{
// раздельно от конструктора, чтобы дать построиться синхронно.
// уничтожать лучше тоже синхронно, т.е. сборщиком мусора.
// не желательно объявлять Thread автоматической переменной.
// я про параметр просто забыл в аргументах написать
hthread = (HANDLE)_beginthread((void(*)(void*))gmain, this, 0x1000);
}
protected:
virtual void main() = 0;
};
...
class MyThread : public Thread
{
void main()
{
...
}
}
MyThread* my_thread = new MyThread();
my_thread->start();
Но по-моему, лучше сделать static MyThread::start(Thread*), которая запускает поток и вписывает его в список сборщика мусора (В своём классе я так и сделал).