代码如下:
// Thread.cpp :win32线程库,目前只能是演示的强度
// 作者 :galphy 2005-6-20
// 推荐使用IDE:Dev-C++,基于g++、轻巧
//
#include <stdio.h>
#include <windows.h>
typedef unsigned long (__stdcall * THREADFUNC)(void *);
class Thread
{
public:
/**
*
*/
//void Exit()
//{
// if(true)
// {
// ExitThread(exitCode);
// }
//}
/**
*
*/
//void Stop()
//{
// DWORD status;
// int i;
// for(i=0; i<200; i++)
// {
// if( ::GetExitCodeThread(m_Handle, &status) && status==STILL_ACTIVE ) Sleep(10);
// else break;
// }
// if(i >= 200) Kill(); //2秒还不停下来就把它KILL掉
//}
/**
* 杀死线程
*/
BOOL Kill()
{
if(m_Handle)
{
return TerminateThread(m_Handle,exitCode);
}
}
/**
* 创建线程
*/
Thread(THREADFUNC func , void *arg)
{
m_ThreadId = 0;
m_Handle = NULL;
exitCode = 0;
m_Handle = CreateThread(0 , 0 , func , arg , CREATE_SUSPENDED , &m_ThreadId);
}
/**
* 启动线程
*/
DWORD Resume()
{
if(m_Handle)
{
return ResumeThread(m_Handle);
}
}
/**
* 挂起线程
*/
DWORD Suspend()
{
if(m_Handle)
{
return SuspendThread(m_Handle);
}
}
/**
* 清除线程
*/
~Thread()
{
if(m_Handle)
{
CloseHandle(m_Handle);
}
m_ThreadId = 0;
m_Handle = NULL;
exitCode = 0;
}
private:
DWORD m_ThreadId;
HANDLE m_Handle;
DWORD exitCode;
};
/**
* 线程的回调函数
*/
unsigned long do_work(void* p)
{
for(int i = 0 ; i < 1000000 ; i++)
{
printf("%d---->%d/n" , i , (int *)p);
//Sleep(1000);
}
return 0;
}
//测试主程序
int main(int argc, char* argv[])
{
Thread mythread((THREADFUNC)do_work , (void*)1000);
mythread.Resume();
Sleep(1000);
mythread.Suspend();
Sleep(1000);
mythread.Resume();
Thread mythread1((THREADFUNC)do_work , (void*)1000);
mythread1.Resume();
Thread mythread2((THREADFUNC)do_work , (void*)1000);
mythread2.Resume();
Sleep(5000);
return 0;
}