线程学习三

前两次学习都是只创建一个线程

这次我们写一个多线程的模拟器

下面我们将认识两个函数

DWORD SuspendThread(HANDLE hThread);

这个函数是将线程挂起,也就是暂停的意思


参数 hThread 是线程句柄


线程挂起之后需要调用另一个函数将线程唤醒

DWORD ResumeThread(HANDLE hThread);

参数hThread是一样的意思。不解释不解释


用MFC创建一个下图所示的  对话框

先 打开ClassWizaid  在 menber variables 里面 给三个进度条添加控件变量

分别为如下图所示




然后给各个按钮一次添加ID号码

IDC_ALL_START , IDC_STOP1,IDC_STOP2 , IDC_STOP3 , IDC_START1 , IDC_START2 , IDC_START3

然后双击各个按钮添加函数

我们按照上次的步骤在 类的头文件里面加入(类外面添加函数的申明)

void func1(LPVOID cpro1);
void func2(LPVOID cpro2);
void func3(LPVOID cpro3);

然后再 类里面添加 下面的私有变量



线程函数添加下面代码

void func1(LPVOID cpro1)
{
	CProgressCtrl *pro = (CProgressCtrl *)cpro1 ; 
	for (int i = 0 ;  ; ++i )
	{
		i = i % 10 ;
		pro->SetPos(i);
		Sleep(1000);
	}
	
}

void func2(LPVOID cpro2)
{
	CProgressCtrl *pro = (CProgressCtrl *)cpro2 ; 
	for (int i = 0 ;  ; ++i )
	{
		i = i % 10 ;
		pro->SetPos(i);
		Sleep(1000);
	}
}

void func3(LPVOID cpro3)
{
	CProgressCtrl *pro = (CProgressCtrl *)cpro3 ; 
	for (int i = 0 ;  ; ++i )
	{
		i = i % 10 ;
		pro->SetPos(i);
		Sleep(1000);
	}
}



按钮函数添加下面代码

void CThread3_1Dlg::OnAllStart() 
{
	// TODO: Add your control notification handler code here
	thread1 = CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE)func1, &m_pro1 , 0 , &threadid1 );
	thread2 = CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE)func2, &m_pro2 , 0 , &threadid2 );
	thread3 = CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE)func3, &m_pro3 , 0 , &threadid3 );
	GetDlgItem(IDC_ALL_START)->EnableWindow(false);
	GetDlgItem(IDC_STOP1)->EnableWindow(true);
	GetDlgItem(IDC_STOP2)->EnableWindow(true);
	GetDlgItem(IDC_STOP3)->EnableWindow(true);
}

void CThread3_1Dlg::OnStart3() 
{
	// TODO: Add your control notification handler code here
	ResumeThread(thread3);
	GetDlgItem(IDC_STOP3)->EnableWindow(true);
	GetDlgItem(IDC_START3)->EnableWindow(false);
}

void CThread3_1Dlg::OnStart1() 
{
	// TODO: Add your control notification handler code here
	ResumeThread(thread1);
	GetDlgItem(IDC_STOP1)->EnableWindow(true);
	GetDlgItem(IDC_START1)->EnableWindow(false);
}

void CThread3_1Dlg::OnStart2() 
{
	// TODO: Add your control notification handler code here
	ResumeThread(thread2);
	GetDlgItem(IDC_STOP2)->EnableWindow(true);
	GetDlgItem(IDC_START2)->EnableWindow(false);
}

void CThread3_1Dlg::OnStop1() 
{
	// TODO: Add your control notification handler code here
	SuspendThread(thread1);
	GetDlgItem(IDC_START1)->EnableWindow(true);
	GetDlgItem(IDC_STOP1)->EnableWindow(false);
}

void CThread3_1Dlg::OnStop2() 
{
	// TODO: Add your control notification handler code here
	SuspendThread(thread2);
	GetDlgItem(IDC_START2)->EnableWindow(true);
	GetDlgItem(IDC_STOP2)->EnableWindow(false);
}

void CThread3_1Dlg::OnStop3() 
{
	// TODO: Add your control notification handler code here
	SuspendThread(thread3);
	GetDlgItem(IDC_START3)->EnableWindow(true);
	GetDlgItem(IDC_STOP3)->EnableWindow(false);
}

添加之后

最后在  初始化函数里面添加

	m_pro1.SetRange(0 , 10 );
	m_pro2.SetRange( 0 , 10 );
	m_pro3.SetRange(0 , 10) ;
	GetDlgItem(IDC_START1)->EnableWindow(false);
	GetDlgItem(IDC_START2)->EnableWindow(false);
	GetDlgItem(IDC_START3)->EnableWindow(false);
	GetDlgItem(IDC_STOP1)->EnableWindow(false);
	GetDlgItem(IDC_STOP2)->EnableWindow(false);
	GetDlgItem(IDC_STOP3)->EnableWindow(false);


编译运行


就可以操纵几个线程工作了

下面是截图



最后   源代码  的下载地址如下所示:

http://download.csdn.net/detail/midle110/4412744








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值