QQ登录

只需一步,快速开始

234上位机VC MFC实现线程的优先执行

[ 复制链接 ]

234上位机VC MFC实现线程的优先执行

234上位机VC MFC实现线程的优先执行
234上位机VC MFC实现线程的优先执行
功能展示
多个线程对相同资源访问时有优先权的设置,比如我们在一边听着音乐,一边浏览网页时,这时就可以把执行音乐播放任务的线程执行级别设置高一点,这样可以不让音乐听起来断断续续,我们当前例程实现七个不同优先级别线程向编辑框写入文本,效果如图,点击七个按钮,启动七个不同级别线程,线程以各自的优先级别向编辑框写入文本;
要点提示
线程的优先级别可以使用函数SetThreadPriority();
函数原型:BOOLWINAPI SetThreadPriority(HANDLE hThread,in int nPriority);
hThread是线程的句柄。nPriority是线程的优先级;共有七级别分别为:
THREAD_PRIORITY_IDLE(最低)
THREAD_PRIORITY_LOWEST(低)
THREAD_PRIORITY_BELOW_NORMAL( 低于标准)
THREAD_PRIORITY_NORMAL(标准)
THREAD_PRIORITY_ABOVE_NORMAL(高于标准)
THREAD_PRIORITY_HIGHEST(高)
THREAD_PRIORITY_TIME_CRITICAL(最高)
实现功能
1.新建基于对话框的应用程序
2.拖拽一编辑框ID为IDC_EDIT1,和七个按钮关联按钮函数
  1. void CGkbc8Dlg::OnButton5()
  2. {
  3.         HANDLE h5;
  4.         h5=CreateThread(NULL,0,ThreadFun,(LPVOID)this,CREATE_SUSPENDED,&wID5);
  5.         SetThreadPriority(h5,THREAD_PRIORITY_ABOVE_NORMAL);//+1(在原有基础上+1)
  6.         ResumeThread(h5);
  7. }
  8. void CGkbc8Dlg::OnButton6()
  9. {
  10.         HANDLE h6;
  11.         h6=CreateThread(NULL,0,ThreadFun,(LPVOID)this,CREATE_SUSPENDED,&wID6);        
  12.         SetThreadPriority(h6,THREAD_PRIORITY_HIGHEST);//+2(在原有基础上+2)
  13.         ResumeThread(h6);
  14. }
  15. void CGkbc8Dlg::OnButton7()
  16. {
  17.         HANDLE h7;
  18.         h7=CreateThread(NULL,0,ThreadFun,(LPVOID)this,CREATE_SUSPENDED,&wID7);
  19.         SetThreadPriority(h7,THREAD_PRIORITY_TIME_CRITICAL);//如果进程优先级为realtime则调整为31,其它情况为15
  20.         ResumeThread(h7);        
  21. }
  22. void CGkbc8Dlg::OnButton4()
  23. {
  24.         HANDLE h4;
  25.         h4=CreateThread(NULL,0,ThreadFun,(LPVOID)this,CREATE_SUSPENDED,&wID4);        
  26.         SetThreadPriority(h4,THREAD_PRIORITY_NORMAL);//不变(取进程优先级值)
  27.         ResumeThread(h4);
  28. }
复制代码
  1. void CGkbc8Dlg::OnButton1()
  2. {
  3.         HANDLE h1;
  4.         h1=CreateThread(NULL,0,ThreadFun,(LPVOID)this,CREATE_SUSPENDED,&wID1);        
  5.         SetThreadPriority(h1,THREAD_PRIORITY_IDLE);//如果进程优先级为realtime则调整为16,其它情况为1
  6.         ResumeThread(h1);//<>执行线程
  7. }

  8. void CGkbc8Dlg::OnButton2()
  9. {
  10.         HANDLE h2;
  11.         h2=CreateThread(NULL,0,ThreadFun,(LPVOID)this,CREATE_SUSPENDED,&wID2);
  12.         SetThreadPriority(h2,THREAD_PRIORITY_LOWEST);//-2(在原有基础上-2)
  13.         ResumeThread(h2);
  14. }

  15. void CGkbc8Dlg::OnButton3()
  16. {        
  17.         HANDLE h3;
  18.         h3=CreateThread(NULL,0,ThreadFun,(LPVOID)this,CREATE_SUSPENDED,&wID3);        
  19.         SetThreadPriority(h3,THREAD_PRIORITY_BELOW_NORMAL);//-1(在原有基础上-1)
  20.         ResumeThread(h3);
  21. }
复制代码
3.添加向编辑框写入文本的自定义函数函数ShowText();
4.在主对话框源文顶部添加线程函数ThreadFun();
  1. DWORD wID1,wID2,wID3,wID4,wID5,wID6,wID7;
  2. DWORD WINAPI ThreadFun(LPVOID pParam)
  3. {
  4.         CGkbc8Dlg* pDlg=(CGkbc8Dlg*)pParam;
  5.         DWORD wID=GetCurrentThreadId();
  6.         if(wID==wID1)
  7.                 pDlg->ShowText(1);
  8.         else if(wID==wID2)
  9.                 pDlg->ShowText(2);
  10.         else if(wID==wID3)
  11.                 pDlg->ShowText(3);
  12.         
复制代码
  1. else if(wID==wID4)
  2.                 pDlg->ShowText(4);
  3.         else if(wID==wID5)
  4.                 pDlg->ShowText(5);
  5.         else if(wID==wID6)
  6.                 pDlg->ShowText(6);
  7.         else if(wID==wID7)
  8.                 pDlg->ShowText(7);
  9.         return 0;
  10. }
复制代码
我们来演示下功能实现的整个过程

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:237上位机VC MFC实现线程的优先执行.rar 
文件大小:130.38 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索