工作线程AfxBeginThread的使用

工作线程通常用来执行一些后台任务,如:数据计算、后台杀毒等等。因为不需要创建窗口和处理用户消息,编写比较容易,在程序中只要调用AfxBeginThread 函数就可以创建并启动一个工作线程了。

AfxBeginThread 的原型如下:

CWinThread *AfxBeginThread( 
    AFX_THREADPROC pfnThreadProc,                           //指向控制函数的地址  
    LPVOID pParam,                                                     //指向传递给控制函数的参数  
    int  nPriority /* = THREAD_PRIORITY_NORMAL */ ,     //指定线程的优先级  
    UINT nStackSize /* = 0 */ ,                                      //指定堆栈大小  
    DWORD dwCreateFlags /* = 0 */ ,                            //创建标识  
    LPSECURITY_ATTRIBUTES lpSecurityAttrs /* = NULL */     //安全属性  

从上面参数可以看到,只有前两个参数是必须的,其余参数都使用默认的话,就可创建了一个具有普通优先级别的线程。

示例:编写一个应用程序,当在程序窗口按下鼠标左键,启动一个线程,该线程可以在屏幕上显示一个信息框。
1.新建单文档程序;
2.在视图类CPP文件添加一个准备作为线程的函数:

UINT MessageThread(LPVOID pParam) 

    LPTSTR    pMessage = (LPTSTR)pParam; 
    CWnd *pMainWnd = AfxGetMainWnd(); 
    ::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread Message" ), MB_OK); 
    return  0 ; 

3.在视图类的鼠标左键消息响应函数中创建和启动线程:

void  CThreadTestView::OnLButtonDown(UINT nFlags, CPoint point) 

    AfxBeginThread(MessageThread, _T("Greetings from your thread!" )); 
    CView::OnLButtonDown(nFlags, point); 

程序运行结果:

时间: 2024-08-04 03:57:31

工作线程AfxBeginThread的使用的相关文章

MFC的工作线程揭秘-CWinThead自动删除揭秘

呵呵,说揭秘其实是说给自己听的,因为今天做了个MFC多线程优先级的例子,在线程里面使用了AfxGetMainWnd()->MDIGetActive(),返回值类型暂不讨论,就是这套东西在线程中具有诡异现象,查了一点说是线程里面有个map记录了窗口指针和其句柄的映射关系,使得有些指针不好使.等查明后在补全这里.   今天主要写的是另一个问题,创建工作线程时,AfxBeginThread返回的CWinThread的对象指针所指的对象在默认情况下会自动删除.如果你不想让他自己删除,而且自己想查看线程信

你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗?

原文:你真的了解:IIS连接数.IIS并发连接数.IIS最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数 吗? IIS连接数   一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫"IIS限制连接数" 这边客户请求的连接内容包括: 1.网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任何一个资源的请求

netty 多线程-关于netty工作线程并发的问题。

问题描述 关于netty工作线程并发的问题. 最近在做一个项目的压测是有关netty并发的.1.工作线程coresize设置最小20,最大100,但是worker线程数一直都是20从来没超过,也增加过并发量,不知道是什么原因.2.尝试把coresize调整为50,工作线程只创建到48. 想请教下,1中为何线程数达不到最大线程设置:work线程的工作机制究竟是咋么样:现打算进行调优,该从哪方面下手. 解决方案 http://www.infoq.com/cn/articles/netty-concu

SQL server的worker thread工作线程讲解

我们都知道SQL server的worker thread是SQL server 用来执行task的工作线程.Worker threads 的数目缺省是SQL server 动态创建的,需要多少就会创建多少,直到到达"max worker threads"的上限.如果你想改变缺省的worker threads,那么可以使用下面的脚步修改: exec sp_configure'show advance',1 go reconfigure with override go exec sp_

启动多个工作线程-下载图片一般都是单任务伦循。但是如果每次下载图片都开启一个工作线程会导致什么?

问题描述 下载图片一般都是单任务伦循.但是如果每次下载图片都开启一个工作线程会导致什么? 如题.工作线程起多了会导致什么?会不会导致内存益出.然后崩了? 解决方案 Android 一个下载任务分为多个线程下载unity 线程下载图片 解决方案二: 首先无限制创建线程是不可能的~不同的系统给的限制可能不同:有的是1M,有的更多~但绝不会出现分配线程过多导致死机的情形~ 解决方案三: 如果需要下载多个图片,用一个线程的多首先代码编写会方便一些,当然你把线程包装成方法,倒着没多大差别.接下来就讨论多线

HBase源码分析之HRegionServer上的MovedRegionsCleaner工作线程

        MovedRegionsCleaner是什么呢?我们先来看下它在HRegionServer上的定义: /** * Chore to clean periodically the moved region list * 被移动Region列表的定期清理工作线程 */ private MovedRegionsCleaner movedRegionsCleaner;         原来它是HRegionServer上一个被移动Region列表的定期清理工作线程.而它的类的定义如下:

略谈如何从工作线程中弹出对话框

工作线程,在一些技术文章被称为辅助线程,是相对于主线程而言的.在工作线程中使用界面需要一些技巧.我就曾在工程线程中弹出对话框中遇到过莫名奇妙的错误.下面就我的经验谈谈如何从工作线程中弹出对话框(暂时只讲方法,原理还没彻底弄清楚).   实际上在工作线程中直接弹出模式对话框中在debug模式下有时出错(这里的有时的意思是必然会出错,但是不是每次都出错),弹出模式对话框的代码如下:   DWORD WINAPI RecvThread(LPVOID lpParam)    // 工作线程函数 {   

HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程

        在<HDFS源码分析心跳汇报之数据结构初始化>一文中,我们了解到HDFS心跳相关的BlockPoolManager.BPOfferService.BPServiceActor三者之间的关系,并且知道最终HDFS的心跳是通过BPServiceActor线程实现的.那么,这个BPServiceActor线程到底是如何工作的呢?本文,我们将继续HDFS心跳分析之BPServiceActor工作线程运行流程.         首先,我们先看下         那么,BPServiceA

关于IIS工作线程数的设置

问题描述 测试客户端:开了4个进程,每个进程创建10线程去访问本地IIS网页.测试服务器A:本地IIS网页,逻辑:Sleep(200)返回直接返回.测试服务器B:本地VS程序自带IIS,逻辑同上实际测试情况1:首先打开一个测试客户端进程,使用10个线程同时访问测试服务器A和测试服务器B,测试结果相似.实际测试情况2:打开4个测试客户端进程,使用40个进程同时访问测试服务器A和B,测试结果相差4倍.查看性能监视器,发现RequestsCurrent发现当前线程的值在测试服务A时为10,测试服务器B