多线程之二,windows下的多线程-基础

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

代码如下:

// 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;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航