class Thread {
 HANDLE hthread_;
 unsigned int id_;
 void run(void) { /* 具体的な処理 */ }
public:
 void start(void) { hthread_ = (HANDLE)_beginthreadex(NULL, 0, Thread::entrypoint, this, 0, &id_); }
 DWORD suspend(void) const { return SuspendThread(handle()); }
 DWORD resume(void) const { return ResumeThread(handle())); }
 static unsigned int WINAPI entrypoint(void* instance) {
  thread_t* p = static_cast<thread_t*>(instance);
  p->run();
  _endthreadex(0);
  CloseHandle(p->handle());
  p->hthread_ = 0;
  return 0;
 }
};