+struct Thread::Private
+{
+#ifdef WIN32
+ HANDLE handle;
+#else
+ pthread_t handle;
+#endif
+
+ Private(): handle(0) { }
+
+#ifdef WIN32
+ static DWORD WINAPI main_wrapper(void *t)
+ { reinterpret_cast<Thread *>(t)->main(); return 0; }
+#else
+ static void *main_wrapper(void *t)
+ { reinterpret_cast<Thread *>(t)->main(); return 0; }
+#endif
+};
+
+
+Thread::Thread():
+ priv_(new Private),
+ launched_(false)
+{ }
+
+Thread::~Thread()
+{
+ if(launched_)
+ {
+ kill();
+ join();
+ }
+ delete priv_;
+}
+