C++/MFC-多线程

在一个进程中创建多个线程。

一、对话框设置

1.1添加7个Cstatic,及7个CEdit控件

1.2CEdit控件 绑定7个UINT类型的值变量 m_edt_time1至m_edt_time7

1.3添加3个CButton控件  分别为CreateThread       SuspendThread        ResumeThread


二、回掉函数

#define WM_USER_MSGWM_USER+1//自定义消息
DWORD WINAPI ThreadProc(
			LPVOID lpParameter   // thread data
			)
{
	UINT* i=(UINT*)lpParameter;//因为绑定的是7个UINT类型的值变量
	int Num=0;
	while(1)
	{
      		*i=(*i)++;
	  	for (int j=0;j<=0x1FFFFFF;j++)//为了增加CPU负重,便于观察
	  	{
        		Num+=j;
	  	}
		
	  	AfxGetApp()->m_pMainWnd->SendMessage(WM_USER_MSG,0,0);//发送消息,故需要一个接收消息的函数
	  	Sleep(20);//暂时冻结此线程毫秒让出时间片
	}
	return Num;
}

三、存放线程信息

在相关的.h文件中:

HANDLE tHandlethread[7];//线程句柄

DWORD tid[7];//线程ID

四、创建线程

创建7个线程:null,0,回掉函数,创建的对象,优先级,类型,ID

int i=0;

tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time1,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDED
SetThreadPriority(tHandlethread[i],THREAD_PRIORITY_IDLE);
i++;
tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time2,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDED
SetThreadPriority(tHandlethread[i],THREAD_PRIORITY_LOWEST);
i++;
tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time3,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDED
SetThreadPriority(tHandlethread[i],THREAD_PRIORITY_BELOW_NORMAL);
i++;
tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time4,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDED
SetThreadPriority(tHandlethread[i],THREAD_PRIORITY_NORMAL);
i++;
tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time5,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDED
SetThreadPriority(tHandlethread[i],THREAD_PRIORITY_ABOVE_NORMAL);
i++;
tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time6,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDED
SetThreadPriority(tHandlethread[i],THREAD_PRIORITY_HIGHEST);
i++;
tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time7,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDED
SetThreadPriority(tHandlethread[i],THREAD_PRIORITY_TIME_CRITICAL);

五、消息相应函数

重写WindowProc即可

LRESULT CDialog_Thread_Priority_test::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	// TODO: 在此添加专用代码和/或调用基类

	if (message==WM_USER_MSG)
	{
		UpdateData(false);
	}
	return CDialog::WindowProc(message, wParam, lParam);
}

注意别忘了ResumeThread(tHandlethread[i]);,否则线程虽然创建了,但没有运行起来。

程序编号后,点击运行程序,但不要点对话框内的任何按键。先启动任务管理器,在详细信息中找到对应的进程。


右键-设置相关性,将CPU勾选为1个。在运行程序,此时,edit框中数值变化的差异较为明显。

六、查看线程

双击PrcView.exe,找到相应的进程

右键->Threads,即可查看各线程的ID,优先级等。




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值