`

MFC 多线程

阅读更多
主要内容转载自:



Win32对线程的支持。主要函数及说明
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,                 DWORD dwStackSize,                 LPTHREAD_START_ROUTINE lpStartAddress,                 LPVOID lpParameter,                 DWORD dwCreationFlags,                 LPDWORD lpThreadId);lpThreadAttributes:指向一个 SECURITY_ATTRIBUTES 结构的指针,该结构决定了线程的安全属性,一般置为 NULL;dwStackSize:指定了线程的堆栈深度,一般都设置为0;lpStartAddress:表示新线程开始执行时代码所在函数的地址,即线程的起始地址。一般情况为(LPTHREAD_START_ROUTINE)ThreadFunc,ThreadFunc 是线程函数名;lpParameter:指定了线程执行时传送给线程的32位参数,即线程函数的参数;dwCreationFlags:控制线程创建的附加标志,可以取两种值。如果该参数为0,线程在被创建后就会立即开始执行;如果该参数为CREATE_SUSPENDED,则系统产生线程后,该线程处于挂起状态,并不马上执行,直至函数ResumeThread被调用;lpThreadId:该参数返回所创建线程的ID;如果创建成功则返回线程的句柄,否则返回NULL。
DWORD SuspendThread(HANDLE hThread);用于挂起指定的线程如果函数执行成功,则线程的执行被终止。
DWORD ResumeThread(HANDLE hThread);该函数用于结束线程的挂起状态,执行线程。
VOID ExitThread(DWORD dwExitCode);该函数用于线程终结自身的执行,主要在线程的执行函数中被调用。其中参数dwExitCode用来设置线程的退出码。
BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);一般情况下,线程运行结束之后,线程函数正常返回,但是应用程序可以调用TerminateThread强行终止某一线程的执行。各参数含义如下:hThread:将被终结的线程的句柄;dwExitCode:用于指定线程的退出码。使用TerminateThread()终止某个线程的执行是不安全的,可能会引起系统不稳定;虽然该函数立即终止线程的执行,但并不释放线程所占用的资源。因此,一般不建议使用该函数。
BOOL PostThreadMessage(DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam);该函数将一条消息放入到指定线程的消息队列中,并且不等到消息被该线程处理时便返回。idThread:将接收消息的线程的ID;Msg:指定用来发送的消息;wParam:同消息有关的字参数;lParam:同消息有关的长参数;调用该函数时,如果即将接收消息的线程没有创建消息循环,则该函数执行失败。
DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds)hHandle为要监视的对象(一般为同步对象,也可以是线程)的句柄;dwMilliseconds为hHandle对象所设置的超时值,单位为毫秒;  当在某一线程中调用该函数时,线程暂时挂起,系统监视hHandle所指向的对象的状态。如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。参数dwMilliseconds有两个具有特殊意义的值:0和INFINITE。若为0,则该函数立即返回;若为INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态时为止。



MFC对多线程编程的支持。
MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。
  工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。
  在MFC中,一般用全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用于创建工作者线程和用户界面线程。
CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc,                      LPVOID pParam,                      nPriority=THREAD_PRIORITY_NORMAL,                      UINT nStackSize=0,                      DWORD dwCreateFlags=0,                      LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL)PfnThreadProc:指向工作者线程的执行函数的指针,线程函数原型必须声明如下:UINT ExecutingFunction(LPVOID pParam);请注意,ExecutingFunction()应返回一个UINT类型的值,用以指明该函数结束的原因。一般情况下,返回0表明执行成功。pParam:传递给线程函数的一个32位参数,执行函数将用某种方式解释该值。它可以是数值,或是指向一个结构的指针,甚至可以被忽略;nPriority:线程的优先级。如果为0,则线程与其父线程具有相同的优先级;nStackSize:线程为自己分配堆栈的大小,其单位为字节。如果nStackSize被设为0,则线程的堆栈被设置成与父线程堆栈相同大小;dwCreateFlags:如果为0,则线程在创建后立刻开始执行。如果为CREATE_SUSPEND,则线程在创建后立刻被挂起;lpSecurityAttrs:线程的安全属性指针,一般为NULL;
CWinThread* AfxBeginThread(CRuntimeClass* pThreadClass,                      int nPriority=THREAD_PRIORITY_NORMAL,                      UINT nStackSize=0,                      DWORD dwCreateFlags=0,                      LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL);pThreadClass 是指向 CWinThread 的一个导出类的运行时类对象的指针,该导出类定义了被创建的用户界面线程的启动、退出等;其它参数的意义同形式1。使用函数的这个原型生成的线程也有消息机制,在以后的例子中我们将发现同主线程的机制几乎一样。
分享到:
评论

相关推荐

    MFC多线程的创建,包括工作线程和用户界面线程

    ### MFC多线程的创建详解 #### 一、MFC多线程概述 MFC (Microsoft Foundation Classes) 是微软为简化Windows程序开发提供的一套类库,它封装了Win32 API,使得开发者能够更加方便地进行Windows应用程序的开发。在...

    MFC多线程编程

    【MFC多线程编程】是Windows环境下使用Microsoft Foundation Class (MFC)库进行多线程应用程序开发的技术。MFC库是Visual C++提供的一种面向对象的类库,它简化了Windows API的使用,包括多线程编程。多线程在现代...

    MFC多线程例子

    MFC多线程是MFC库中的一个重要特性,允许开发者在同一个应用程序中创建和管理多个执行线程,从而实现并发处理任务,提高程序效率。在Windows操作系统中,多线程技术广泛应用于UI更新、后台数据处理、异步操作等场景...

    MFC多线程开发例程源码1

    本示例代码“MFC多线程开发例程源码1”是针对MFC库进行多线程编程的一个实践案例,旨在帮助开发者理解如何在MFC应用中创建和管理多个执行线程。 首先,我们要明白什么是多线程。多线程是一种程序设计模型,允许应用...

    MFC多线程 多事件

    总结来说,MFC多线程的实现包括创建线程、定义线程的运行逻辑以及处理线程间的通信。多事件触发则依赖于MFC提供的同步对象,如`CEvent`和`CCriticalSection`。通过这些机制,我们可以构建出复杂的多线程应用,例如在...

    mfc多线程购票

    在这个“mfc多线程购票”场景中,我们将探讨如何使用MFC来实现一个多线程的票务系统。 1. **MFC中的多线程**: MFC支持创建和管理多线程,主要通过`CWinThread`类来实现。每个线程都是由一个`CWinThread`对象代表...

    MFC 多线程及线程同步

    MFC 多线程及线程同步 MFC 多线程及线程同步 MFC 多线程及线程同步

    MFC多线程下载

    总结,MFC多线程下载涉及到线程创建、数据同步、错误处理等多个关键点。正确理解和应用这些概念,可以帮助你构建高效、稳定且用户友好的下载程序。在实际开发中,务必注意线程安全和资源管理,以确保程序的可靠性和...

    MFC 多线程实例.rar

    总之,这个"MFC 多线程实例"是学习和理解MFC多线程编程的一个宝贵资源,涵盖了从线程创建到同步机制的诸多方面。通过仔细研究和实践这个实例,你将能够更好地掌握在MFC中进行多线程编程的技巧和最佳实践。

    MFC多线程编程实例三个

    在本文中,我们将深入探讨MFC(Microsoft Foundation Classes)中的多线程编程,结合提供的标题“MFC多线程编程实例三个”以及描述中的信息,我们将会了解到如何在MFC应用中实现多线程,特别是在Tab控件中创建多个带...

    关于MFC多线程编程的基本介绍

    对于初学者和有经验的开发者来说,理解和掌握MFC多线程编程都具有很大的价值。 在Windows操作系统中,线程是程序执行的基本单位,每个线程都有自己的执行栈和程序计数器。多线程允许一个进程中同时执行多个不同的...

    MFC多线程完整总结及示例代码

    MFC 多线程完整总结及示例代码 多线程是一种重要的编程技术,用于实现并行处理和提高系统性能。在 MFC 中,多线程编程可以通过 Win32 API 函数和 MFC 类库来实现。在本文中,我们将对多线程的基本概念、多线程编程...

    mfc多线程聊天程序

    在这个场景中,"mfc多线程聊天程序"指的是使用MFC框架开发的、支持多线程功能的聊天应用程序。多线程在聊天程序中的应用可以提高程序的响应速度和并发处理能力,为用户提供更好的体验。 多线程技术在聊天程序中的...

    mfc多线程聊天

    **MFC多线程聊天**是基于Microsoft Foundation Classes (MFC)库开发的一款应用程序,它允许用户在同一个程序中进行并发通信,实现多用户间的实时交流。MFC是微软为Windows平台提供的一种C++类库,它封装了Windows ...

    MFC多线程编程例子

    这个例子可能包含了一个简单的MFC多线程应用程序,展示了如何创建和管理线程。源代码可能包含一个主线程,负责显示UI,以及一个或多个工作者线程,用于执行后台任务。项目说明可能涵盖了从创建新工程到添加线程类,...

    MFC多线程同步类的使用

    【MFC多线程同步类的使用】 在MFC(Microsoft Foundation Classes)中,多线程编程是一项重要的技术,尤其在开发复杂的、并发执行的任务时。多线程允许程序同时执行多个任务,提升效率和响应速度。然而,线程间的...

    MFC多线程例程

    要创建一个MFC多线程应用,你需要继承`CWinThread`并覆盖其成员函数,如`InitInstance()`、`Run()`和`ExitInstance()`。 1. **初始化线程**: - `InitInstance()`函数是线程初始化的地方,通常在这里进行一些必要...

    MFC多线程编程实例----多线程画线源码

    在标题中提到的“MFC多线程编程实例——多线程画线源码”,我们主要关注的是如何在同一个窗口或图形界面上,通过多个线程同时执行画线操作。这通常涉及到以下几个关键知识点: 1. **线程基础**:在计算机科学中,...

Global site tag (gtag.js) - Google Analytics