zoukankan      html  css  js  c++  java
  • 使用MFC中的AfxBeginThread创建多线程

    创建一个基于对话框的工程,工程名为CreateThreadRect
     
    在CreateThreadRect.cpp中增加一个ThreadProc函数,代码如下
     
    工作者线程的函数必须是全局函数或静态成员函数,不能是普通的成员函数
     
    DWORD WINAPI ThreadProc(LPVOID pParam)
    {
        CDC* pdc;
        //将传入的参数转为RECT*
        RECT* rect=(RECT*)pParam;  
        //得到设备句柄
        pdc=AfxGetApp()->m_pMainWnd->GetDC();  
        //设置画刷
        CBrush brush(HS_VERTICAL,RGB(0,255,0));  
        //选入到设备中
        CBrush* oldbrush=pdc->SelectObject(&brush);  
        int n=0;
        while(n++<=2000)
        {
            pdc->Rectangle(rect->left,rect->top,rect->right+n,rect->bottom );
            Sleep(1);        
        }
        pdc->SelectObject(oldbrush);
        pdc->ReleaseOutputDC();
        return 0;
    }

    添加一个按钮控件IDTHREAD,该按钮事件代码如下

    void CCreateThreadRectDlg::OnThread() 
    {
        // TODO: Add your control notification handler code here
         
        RECT rect1;
        rect1.left=20;  //左上角x坐标
        rect1.top=100;    //左上角y坐标
        rect1.right=20;       //右下角x坐标
        rect1.bottom =rect1.top +100;   //右下角y坐标
        //创建第一个线程ThreadProc,相对优先级THREAD_PRIORITY_IDLE面对任何等级调整为1    
        AfxBeginThread((AFX_THREADPROC)ThreadProc,&rect1,THREAD_PRIORITY_IDLE);
     
        RECT rect2;
        rect2.left=rect1.left;
        rect2.top=rect1.bottom +20;
        rect2.right=rect1.right;
        rect2.bottom =rect2.top +100;
        //创建第二个线程ThreadProc,相对优先级THREAD_PRIORITY_TIME_CRITICAL
        //面对任何等级调整为15,面对REALTIME等级调整为32
        AfxBeginThread((AFX_THREADPROC)ThreadProc,&rect2,THREAD_PRIORITY_TIME_CRITICAL);
    }

    运行结果:

    1

  • 相关阅读:
    javaWeb学习总结——文件上传、下载
    基于JDK1.8的JVM 内存结构【JVM篇三】
    Mybatis分页插件PageHelper的学习与使用
    使用IntelliJ IDEA创建第一个Mawen项目
    SpringMVC参数绑定学习总结【前后端数据参数传递】
    【2013年】开发常见问题回顾(一)
    Asp.Net统一前后端提示信息方案
    pip的安装以及binascii报错问题
    win32程序一个简单的计算器
    uva815洪水问题
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/5607042.html
Copyright © 2011-2022 走看看