#ifndef THREAD_H
#define THREAD_H

#include <windows.h>


class Thread{
private:
HANDLE handle;
DWORD id;
public:
Thread();
virtual ~Thread();
virtual void run(){};
static DWORD WINAPI dispatch(LPVOID lParam);
void start();
DWORD suspend();
DWORD resume();
};


#endif

-------------------------------------------------------------

#include "Thread.h"

Thread::Thread(){
handle=0;
}

Thread::~Thread(){
if(handle)CloseHandle(handle);
}

DWORD WINAPI Thread::dispatch(LPVOID lParam){
Thread* thread=reinterpret_cast<Thread*>(lParam);
thread->run();
return 0;
}

void Thread::start(){
handle=CreateThread(0,0,Thread::dispatch,this,0,&id);
}

DWORD Thread::suspend(){
return SuspendThread(this->handle);
}

DWORD Thread::resume(){
return ResumeThread(this->handle);
}