多线程创建和使用

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

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值