使用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);
}

运行结果:

时间: 2024-10-08 20:17:03

使用MFC中的AfxBeginThread创建多线程的相关文章

Java如何创建多线程服务器?

在Java编程中,如何创建多线程服务器? 以下示例演示如何使用ServerSocket类的MultiThreadServer(socketname)方法和Socket类的ssock.accept()方法来创建多线程服务器. package com.yiibai; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public c

转:MFC中创建多线程

MFC中创建多线程 MFC的多线程函数必须声明为静态的或者是全局函数(不同的在于全局函数不能访问类的私有静态成员,而静态类函数可以):但这样的线程函数只能访问静态的成员变量,要实现访问类的其他成员,可以这样实现: 1)全局函数.如   UINT   MyThread(LPVOID   p) 2)类的静态成员函数.如   static   UINT   MyView::MyThread(LPVOID   p) 线程函数是可以带参数的,比如  static __stdcall  workthread

转:MFC创建多线程实例

作者:http://blog.csdn.net/wangningyu/article/details/4404134 平时在MFC里使用多线程时其实是很方面的,因为微软提供了一个API让我们很方面的去创建线程:下面是MSDN中关于CreateThread的函数原型: 1.函数原型声明: [cpp] view plain copy print? CreateThread The CreateThread function creates a thread to execute within the

OpenGL在MFC中的使用总结(一)——基本框架

项目中要画3D显示的模型,于是要用到OpenGL,加上是在MFC中,并且是在MFC中的ActiveX中使用.再并且鉴于他们程序主框架的设定.常规的方法还不一定能实现.所以还是查过不少资料,在此一一总结一下.首先总结最基础的一些东西. 一.依照讲课的逻辑,先讲点原理性的东西~ GDI是通过设备描写叙述表(Device Context,下面简称"DC")来画图.而OpenGL是通过渲染描写叙述表(Rendering Context,下面简称"RC").每个GDI命令须要

OpenGL在MFC中的使用总结(一)

项目中要画3D显示的模型,于是要用到OpenGL,加上是在MFC中,而且是在MFC中的ActiveX中使用,再而且鉴于他们程序主框架的设定,常规的方法还不一定能实现.所以还是查过不少资料,在此一一总结一下.首先总结最基础的一些东西. 一.按照讲课的逻辑,先讲点原理性的东西~ GDI是通过设备描述表(Device Context,以下简称"DC")来绘图,而OpenGL是通过渲染描述表(Rendering Context,以下简称"RC").每一个GDI命令需要传给它

MFC中添加ToolTip提示框

PART 1 MFC 对话框中的 Buttton添加提示 例如我们想在一个对话框中的一个button控件添加tooltip,实现的方法如下: 1. 在该对话框的类中添加一个CToolTipCtrl类型成员,并在适当的地方将其初始化如下: m_ToolTipCtrl.Create(this); m_ToolTipCtrl.AddTool(GetDlgItem(IDC_BUTTON1), _T("This is ToolTip")); m_ToolTipCtrl.SetMaxTipWidt

Java多线程开发系列之二:如何创建多线程

前文已介绍过多线程的基本知识了,比如什么是多线程,什么又是进程,为什么要使用多线程等等. 在了解了软件开发中使用多线程的基本常识后,我们今天来聊聊如何简单的使用多线程. 在Java中创建多线程的方式有两种: (1)写一个子类,这个类要继承自Thread类,于此同时这个子类必须要重写Thread类中的run方法(原因我后文中会提到),然后我们就可以用这个类来创建出一个多线程. (2)仍然是写一个类,这个类要实现Runnable接口,与(1)相同,在这个实现类中也需要重写run方法. 这里有一点要注

MFC中模态对话框和非模态对话框

MFC的对话框非为两种,一种叫模态对话框(Modal  Dialog  Box,又叫做模式对话框),一种叫做非模式对话框(Modaless Dialog Box,又叫无模式对话框).两者的区别在于当对话框打开的时候,是否允许用户进行其他对象的操作. 一.模态对话框 模态对话框指,当用户需要对该对话框之外的其他对话框或者模块进行操作时,必须该对话框关闭,才能去编辑其他对话框或者模块. 创建如下: //创建模态对话框 CModalDialog modalDialog; modalDialog.DoM

Qt多线程学习:创建多线程

[为什么要用多线程?] 传统的图形用户界面应用程序都仅仅有一个运行线程,而且一次仅仅运行一个操作.假设用户从用户界面中调用一个比較耗时的操作,当该操作正在运行时,用户界面一般会冻结而不再响应.这个问题能够用事件处理和多线程来解决. [Linux有线程的概念吗?] 传统的UNIX系统也支持线程的概念,但一个进程里仅仅同意有一个线程,这样多线程就是多进程.Linux下的Posix线程(pthreads)是一种轻量级的进程的移植性实现,线程的调度由内核完毕,每一个线程都有自己的编号.假设使用线程,整体