1 编写线程函数
2 建立多线程句柄
3 在测试函数中直接使用线程:挂起,恢复,结束等
线程方法:
static unsigned _stdcall sleepTest2(void *param)//函数返回值类型以及函数参数类型需要匹配
{
int count = 2;
DWORD exitCode = 0;
while(1)
{
Sleep(1500);
cout<<" 我是 线程2 启动的循环输出"<<endl;
count--;
if (count == 0)
{
//GetExitCodeThread(thread2, &exitCode);
cout<<endl<<"the exit num is:"<<exitCode<<endl;
//ExitThread(exitCode);
}
}
return 1;
}
测试函数
void threadTest2()
{
HANDLE thread;
DWORD exit1code = 0;
thread = (HANDLE)_beginthreadex(NULL,0, sleepTest, NULL, 0, 0);
char c = 'y';
while(c)
{
Sleep(1000);
cout<<"我是 进程 启动循环"<<endl;
cin>>c;
if (c == 's')
{
SuspendThread(thread);
}else if (c == 'r')
{
ResumeThread(thread);
}else if ((c == 'n') || (c == 'N'))
{
GetExitCodeThread(thread, &exit1code);
CloseHandle(thread);
_endthreadex(exit1code);
cout<<endl<<" test finish;"<<endl;
break;
}
else
continue;
}
}
直接在主函数中调用此方法,但运行的结果是,在执行_endthreadex(exit1code)后,线程任然没能关闭
但若把线程函数中
//GetExitCodeThread(thread, &exitCode);
cout<<endl<<"the exit num is:"<<exitCode<<endl;
//ExitThread(exitCode);
注释去掉,建立全局函数thread,线程就可以在自己跑完后结束掉
另外也可以用CreateThread Win api创建线程(经量少用)
其定义与 _beginthreadex(NULL,0, sleepTest, NULL, 0, 0) 的使用差不多,各参数的意义:
CreateThread(NULL,0,ThreadProc,NULL,NULL,NULL);
第一个参数是指向安全属性的指针,NULL就行
第二个参数是初始线程堆栈大小,0就可以,WINDOWS会自动分配
第三个参数指向线程函数,必须是这样DWORD WINAPI ThreadProc (LPVOID pParam)
第四个参数是传给线程函数的参数,有就传,没有就NULL
第五个参数是线程启动方式,可以是挂起CREATE_SUSPENDED,或者马上启动NULL
最后一个参数是创建的线程ID。
用其举例,若创建线程是有参数时:
线程函数定义原型:
static unsigned _stdcall sleepTest2(void *param)
线程函数:
void printLeft(LPVOID a = 0)
{
int c = (int )a;
cout<<endl<<"I am print left;and a = "<<c<<endl;
}
创建时:
HANDLE thread;
DWORD id;
thread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)printLeft, LPVOID(3), 0, &id);
参考blog:
http://wenku.baidu.com/view/8f7ba26c011ca300a6c3904b.html
http://wenku.baidu.com/view/7b6a1b6348d7c1c708a14516.html
http://www.cnblogs.com/lgxqf/archive/2009/02/10.html
http://www.cnblogs.com/lidabo/archive/2012/08/15/2640204.html
http://www.cnblogs.com/luxiaoxun/archive/2012/10/09/2716514.html