上代码:
#pragma once
class myThread
{
public:
bool start();
bool join();
virtual void run() = 0;
private:
HANDLE handle_;
DWORD thread_id_;
};
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
myThread* t = (myThread*)(lpParam);
t->run();
return 0;
}
bool myThread::start()
{
handle_ = CreateThread(NULL, 0, ThreadProc, (LPVOID)this, 0, &thread_id_);
return handle_;
}
bool myThread::join()
{
DWORD code = WaitForSingleObject(handle_,INFINITE);
if ( code == WAIT_FAILED)
{
return false;
}
return true;
}
class DriMyThread: public myThread
{
public:
virtual void run();
};
void DriMyThread::run()
{
//imply
printf("\n ni mei !!!!");
}
test code:
std::shared_ptr<DriMyThread> driMyThread(new DriMyThread);
driMyThread->start();
driMyThread->join();
houhou.
/*
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程属性,用于设置线程的属性,NULL表示使用默认的设置
DWORD dwStackSize, //线程堆栈大小,使用0采用默认设置
LPTHREAD_START_ROUTINE lpStartAddress, //指向线程函数的指针
LPVOID lpParameter, //向线程函数传递的参数
DWORD dwCreationFlags, //线程标志 CREATE_SUSPENDED表示创建一个挂起的线程,0表示创建后立即激活线程
LPDWORD lpThreadId); //线程的ID(输出参数)
*/