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

  • 相关阅读:
    面试题19:包含min函数的栈
    编程之美 计算字符串的相似度
    android 数据持久化——I/O操作
    SSD磁盘,CPU居高不下,高并发的情况下,是不是mysql解析器耗费的cpu资源高?
    Eclipse、MyEclipse优化,提高运行速度
    Sonar入门学习
    Oracle 生成指定范围内随机日期
    ios中的GCD
    如何使用Win8系统自带杀毒软件
    安装Ubuntu版本linux过程中没有提示设置root用户密码问题的解决办法
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/5607042.html
Copyright © 2011-2022 走看看