用户界面线程AfxBeginThread的使用】的更多相关文章

用户界面线程在运行时会有一个窗口界面和与其相对应的窗口函数,所以它可以通过响应消息来和用户进行交互. AfxBeginThread 函数原型如下: CWinThread *AfxBeginThread(     CRuntimeClass *pThreadClass,         //从CWinThread派生的RUNTIME_CLASS类      int  nPriority /* = THREAD_PRIORITY_NORMAL */ ,      //指定线程的优先级      UI…
如果你的线程是从CWinThread继承出来的,结束自己就用AfxEndThread, 如果是外部调用的话,可以用PostThreadMessage(m_nThreadID, WM_QUIT,0,0);给这个线程发送消息,线程就会结束的, 其中的m_nThreadID是线程ID. 线程的ID可以这样得到 private: DWORD h_MemoryDraw;//定义变量 h_MemoryDraw = AfxBeginThread(MemoryDraw, Param)->m_nThreadID;…
工作线程通常用来执行一些后台任务,如:数据计算.后台杀毒等等.因为不需要创建窗口和处理用户消息,编写比较容易,在程序中只要调用AfxBeginThread 函数就可以创建并启动一个工作线程了. AfxBeginThread 的原型如下: CWinThread *AfxBeginThread(     AFX_THREADPROC pfnThreadProc,                           //指向控制函数的地址      LPVOID pParam,            …
1. 启动线程: CWinThread* AfxBeginThread( 线程函数,this ); 2.通常导致线程终止的两种情况是:控制函数退出或不允许线程完成运行.如果字处理器使用后台打印线程,若成功完成打印,则控制函数将正常终止.但是,如果用户要取消打印,后台打印线程则不得不提前终止.本主题介绍如何实现每一种情况,以及在终止后如何获取线程的退出代码. (1)正常线程终止 对于辅助线程,正常线程终止很简单:退出控制函数并返回表示终止原因的值.可以使用 函数或 return 语句.一般情况下,…
终止线程 有两种情况可以使线程结束:控制函数结束或者根本就不允许线程完成,而提前终止它.我们可以想象在WORD中进行后台打印,如果打印结束了,那线程就可以结束了.如果用户中止了打印,那后台打印线程也要终止了.本文将主要介绍对这两种情况的实现,并且介绍如何获得线程的结束代码. 1.对于工作线程,结束它是比较容易的:退出线程函数然后返回一个结束原因的代码就是了.用户可以使用AfxEndThread函数或直接利用return返回.通常0代表成功返回,这不是硬性规定,一切要取决于你了.对于用户界面线程,…
AfxBeginThread    用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和过程: 用户界面线程的AfxBeginThread 用户界面线程的AfxBeginThread的原型如下:CWinThread* AFXAPI AfxBeginThread(CRuntimeClass* pThreadClass,int nPriority, UI…
当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.因此掌握多线程多任务设计方法对每个程序员都是必需要掌握的.本实例针对多线程技术在应用中经常遇到的问题,如线程间的通信.同步等,分别进行探讨,并利用多…
1.创建和终止线程 在MFC程序中创建一个线程,宜调用AfxBeginThread函数.该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程. 工作者线程 CWinThread *AfxBeginThread( AFX_THREADPROC pfnThreadProc, //控制函数 LPVOID pParam, //传递给控制函数的参数 int nPriority = THREAD_PRIORITY_NORMAL, //线程的优先级 UINT nStackSize =…
http://blog.csdn.net/qq61394323/article/details/9328301 一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为 IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //…
一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等.用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等.但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务. 在MFC中,一般用全局函数Afx…
AfxBeginThread    用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和过程: 用户界面线程的AfxBeginThread用户界面线程的AfxBeginThread的原型如下: CWinThread* AFXAPI AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority,…
用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和过程: 一.用户界面线程的AfxBeginThread 用户界面线程的AfxBeginThread的原型如下: CWinThread* AFXAPI AfxBeginThread ( CRuntimeClass* pThreadClass, int nPriority, UINT nStackSiz…
一.MFC 剪切板 CListBox *pList = (CListBox*)GetDlgItem(IDC_LIST1); // 获取ListBox控件句柄 CString strTmp; pList->GetText(pList->GetCurSel(), strTmp); // 获取当前控件选中的内容 CString strOutput; AfxExtractSubString(strOutput, strTmp, , ';'); // 提取字符串 TRACE("0-------…
unsigned long _beginthreadex( void * _Security, //第1个参数:安全属性,NULL为默认安全属性 unsigned _StackSize, //第2个参数:指定线程堆栈的大小.如果为0,则线程堆栈大小和创建它的线程的相同.一般用0 unsigned ( __stdcall * _StartAddress )( void * ), //第3个参数:指定线程函数的地址,也就是线程调用执行的函数地址(用函数名称即可,函数名称就表示地址) void * _…
线程是一种从软件到硬件的技术,主要目的是为了提高运行速度,和多任务. ××××××××××××××××××××××××××××××××××××需要储备的资料(他人的)×××××××××××××××××××××××××××× ××http://haobinnan.blog.51cto.com/775253/658446 多线程概述 进程和线程都是操作系统的概念.进程是在基于内存的概念,线程是基于CPU的概念.CPU不清楚什么玩意叫进程,CPU处理的任务叫线程.一个进程可以划分成多个线程给CPU处理…
一.概述 每个系统中都有线程(至少都有一个主线程),而线程最重要的作用就是并行处理,提高软件的并发率.针对界面来说,还能提高界面的响应能力.一般的,为了应用的稳定性,在数据处理等耗时操作会单独在一个线程中运行,而所有与主UI线程有关的控件数据刷新应该到主UI线程中处理.也就是数据处理线程发消息,让界面UI去更新控件.在MFC中线程分为界面线程和工作者线程,界面实际就是一个线程画出来的东西,这个线程维护一个“消息队列”,“消息队列”也是界面线程和工作者线程的最大区别,这个词应该进到你的脑子里,根深…
17.1线程 对于Windows来说所有的线程都是一样的,但MFC却把线程区分为两种类型:User Interface(UI) threads(用户界面(UI)线程)和Worker threads(工作者线程). 两种线程的不同之处在于UI线程具有消息循环而工作者线程没有.UI线程可以创建窗口并处理发送给这些窗口的消息.工作者线程执行后台任务. 17.1.1创建工作者线程 AfxBeginThread定义了两个版本:一个启动UI线程,另一个启动过作者线程 CWinThread*pThread=A…
一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等.用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等.但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务. 在MFC中,一般用全局函数Afx…
对于windows来说,所有的线程都是一样的,但MFC却把线程区分为两种:用户界面(UI)线程和工作者线程.用户界面线程具有消息循环而工作者线程没有.UI线程可以创建窗口并给这些窗口发送消息,工作者线程执行后台任务,因其不接受用户直接输入蘑菇不需要窗口和消息循环. 创建UI线程需要首先从CWinThread派生一个线程类,改类与CWinApp类派生额应用程序类很相似(CwinApp继承自CWinThread).派生类必须重载InitInstance,在其中创建一个对话框.关于对话框的创建可以参见…
一.线程创建 Windows线程在创建时会首先创建一个线程内核对象,它是一个较小的数据结构,操作系统通过它来管理线程.新线程可以访问进程内核对象的所有句柄.进程中的所有内存及同一进程中其它线程的栈. 创建有以下几种方式,分别说明 CreateThread(...) (操作系统提供的API,尽量不要使用) _beginthread(...) _beginthreadex(...) AfxBeginThread(...) (MFC提供的接口) 首先声明一个线程函数,原型为: DWORD FunThr…
在wtl工程中定义一个现成,如下:DWORD WINAPI ThreadFunc( LPVOID pParam ){if( g_pMainlg )g_pMainlg->DoEnumNetwork();return 0;} void CMainDlg::StartTreeThread(){DWORD dwThreadId;HANDLE hThrd = CreateThread( NULL, 0, ThreadFunc, NULL, 0, &dwThreadId );if ( hThrd )Cl…
一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND, 标题为"延时6秒",添加按钮的响应函数, 代码如下: 1.voidCSingleThreadDlg::OnSleepSixSecond() 2.{ 3.Sleep(6000 );//延时6秒 4. } 编译并运行应用程序,单击"延时6秒"按钮,你就会发…
       我们先来看一段运行时会抛出 InvalidOperationException 异常的代码段: private void btnThreadA_Click(object sender, EventArgs e) { Thread thread = new Thread(ChangeTextBox); thread.IsBackground = true; thread.Start(); }   void ChangeTextBox() { for (int i = 0; i < 1…
本文将讨论Android应用程序的线程模型以及如何使用线程来处理耗时较长的操作,而不是在主线程中执行,保证用户界面(UI)的流畅运行.本文还将阐述一些用户界面(UI)中与线程交互的API.UI用户界面线程 当应用程序启动时,系统会为应用程序创建一个主线程(main)或者叫UI线程,它负责分发事件到不同的组件,包括绘画事件.完成你的应用程序与Android UI组件交互.例如,当您触摸屏幕上的一个按钮时,UI线程会把触摸事件分发到组件上,更改状态并加入事件队列,UI线程会分发请求和通知到各个组件,…
// 通过创建委托解决传递参数问题 private void _btnRun_Click( object sender, System.EventArgs e ) { RunTaskDelegate runTask = new RunTaskDelegate( RunTask ); // 委托同步调用方式 runTask( Convert.ToInt16( _txtSecond.Value ) ); } //通过创建委托解决传递参数问题,通过委托的异步调用消除用户界面线程的阻塞问题 privat…
Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核对象,操作系统用它管理线程.系统还用内核对象来存储线程统计信息 ②    一个线程栈,用于维护线程执行时所需的所有函数参数和局部变量. 线程 == 内核对象 + 线程栈; 进程是有惰性的,CPU调度是线程,进程永远不会被调度,进程好比一个公司,线程就是每个干活的业务部门. 进程可以看作是线程的容器(…
在 Android 开发中,你不应该做任何阻碍主线程的事情.但这究竟意味着什么呢?在这次海湾 Android 开发者大会讲座中,Ari Lacenski 认为对于长时间运行或潜在的复杂任务要特别小心.这一次演讲,我们将根据一个真实场景应用的需求,讨论 AsyncTask, Activity, 和 Service,逐步建立一个更易于维护的解决方案. Android 线程 (0:46) 当我们谈论线程,我们知道一个 Android 应用程序至少有一个主线程.这个线程是随着你的Application …
CreateThread._beginthreadex和AfxBeginThread 创建线程好几个函数可以使用,可是它们有什么区别,适用于什么情况呢?参考了一些资料,写得都挺好的,这里做一些摘抄和整合. [参考1]CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别 ===================================================================== 1.CreateThr…
<一>线程间通信方法 全局变量方式:进程中的线程共享全局变量,可以通过全局变量进行线程间通信. 参数传递法:主线程创建子线程并让子线程为其服务,因此主线程和其他线程可以通过参数传递进行通信.主线程在创建其他线程时,可以传递参数给线程函数以达到通信目的. 消息传递法:线程间通信的重要方式,通过调用PostMessage()函数在主线程和工作线程间传递消息:调用PostThreadMessage()函数在用户界面线程和其他线程间传递消息. 同步变量法:此方法在后续章节涉及. <二>线程…
//************工作者线程**************1.在头文件中添加UINT ThreadFunc(LPVOID lpParam); 注意应在类的外部 2.添加protected型变量:CWinThread* pThread 3.添加线程处理函数:UINT ThreadFunc(LPVOID lpParam){ while (true) { ... Sleep(1000); } return 0;} 4.开启线程AfxBeginThread(ThreadFunc,lpParam)…