C++/MFC-多线程
来源:互联网 发布:软件交易平台哪个最好 编辑:程序博客网 时间:2024/06/11 13:30
在一个进程中创建多个线程。
一、对话框设置
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_SUSPENDEDSetThreadPriority(tHandlethread[i],THREAD_PRIORITY_IDLE);i++;tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time2,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDEDSetThreadPriority(tHandlethread[i],THREAD_PRIORITY_LOWEST);i++;tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time3,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDEDSetThreadPriority(tHandlethread[i],THREAD_PRIORITY_BELOW_NORMAL);i++;tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time4,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDEDSetThreadPriority(tHandlethread[i],THREAD_PRIORITY_NORMAL);i++;tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time5,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDEDSetThreadPriority(tHandlethread[i],THREAD_PRIORITY_ABOVE_NORMAL);i++;tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time6,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDEDSetThreadPriority(tHandlethread[i],THREAD_PRIORITY_HIGHEST);i++;tHandlethread[i]=CreateThread(NULL,0,ThreadProc,&m_edt_time7,CREATE_SUSPENDED,&tid[i]);//CREATE_SUSPENDEDSetThreadPriority(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 0
- C++/MFC-多线程
- C++/MFC-多线程绘图
- C++,MFC怎样创建多线程。
- 【C++】深入浅出Win32多线程设计之MFC的多线程
- 多线程MFC
- MFC 多线程
- MFC多线程
- MFC多线程
- MFC多线程
- MFC多线程
- mfc多线程
- MFC多线程
- MFC多线程
- MFC多线程
- MFC 多线程
- MFC 多线程
- MFC多线程
- MFC多线程
- 视觉插件SuperScrollorama.js使用说明
- 为什么总是天妒英才呢?因为没人管笨蛋活多久。
- HTML学习之Css基本语法、样式表和选择器的初步认识
- linux下遍历目录和文件,删除过期天数目录或文件shell脚本
- Cisco VPN client 在win10下使用 以及 安装Error 27850 与 连接Reason 442 错误解决
- C++/MFC-多线程
- 前端性能优化最佳实践
- kafka的安装配置跟基本使用
- Windows server 2012下搭建MySQL数据库并创建远程连接
- SpringBoot整合Mybatis多数据源
- 金蝶EAS·BOS,客户端操作添加进度栏,进度条
- CSU 1804 有向无环图 拓扑序DP
- mybatis学习:八
- 写博客画图工具,非学术