- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章C多线程—武汉科技大学研究生
# 多线程编程基础—进程和线程 多线程编程基础—进程和线程 应用程序在Windows操作系统上是以单独的进程运行的,每一个新启动的应用程序都会创建一个新的进程 线程是进程内部的一个执行单元,它是操作系统分配处理器时间的基本单位 从程序员的角度看,进程即一个可执行程序;线程是进程内的一个可以被操作系统独立调度执行的函数 多线程编程基础—使用多线程的意义 像网络通信程序这样既要进行耗时的工作(远程数据收发),又要保持对用户输入(键盘和鼠标)响应,使用多线程是最佳选择。 一些大型服务程序,如数据库系统,网络游戏服务器程序 ,使用多线程将赋予应用程序强大的控制能力和执行能力。 Windows多线程编程 Windows多线程编程也可以使用两种方法:直接使用Win32 API或MFC线程技术。使用Win32 API的好处是操作非常灵活,而MFC多线程编程较为简便,特别是方便实现界面线程。 在MFC中,线程分为用户界面线程和工作者线程两种。用户界面线程拥有自己的消息队列和消息循环来处理界面消息,可以与用户进行交互。工作者线程没有消息循环,一般用来完成后台工作(例如自动保存、从网络中自动获取数据等)。 多线程编程—API多线程编程 多线程编程—API多线程编程 多线程编程—MFC界面线程 多线程编程—MFC界面线程 多线程编程—MFC界面线程 一.创建线程:原理 为了使用MFC创建一个线程,我们所做的就是编写一个希望的和程序的其它部分同时运行的函数,然后调用AfxBeginThread()来启动一个用以执行我们的函数的线程。只要线程的函数在运行,线程就存活着,当线程函数结束时,线程就被销毁。 方法1 第一种形式用于创建工作者线程的AfxBeginThread()函数如下所示: CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ); 方法2 第二种线程用于创建用户接口线程AfxBeginThread()函数如下所示: CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ); 参数意义 这两种形式的函数的返回值是新创建的线程对象的指针。 参数意义如下: pfnThreadProc:指向工作者线程的控制函数的指针,它不能是NULL。此控制函数必须声明成如下样式: UINT MyControllingFunction( LPVOID pParam ); pThreadClass:从CWinThread派生的RUNTIME_CLASS pParam:传递给工作者线程的控制函数的参数 nPriority:线程的期望的优先权。如果这个值为0,则新线程和创建线程具有同样的优先级。 nStackSize:以字节为单位定义了新线程的堆栈大小。如果这个值为0,则新线程和创建线程具有同样大小的堆栈。 dwCreateFlags:控制线程创建的附加标志。这个值可以是以下两个值中的一个:CREATE_SUSPENDED和0。如果是标志是前者,以挂起数为1启动线程。只有在ResumeThread被调用时,这个线程才会被执行。如果标志为0,则在创建线程后立即执行线程。 lpSecurityAttrs:指向定义了线程安全属性的SECURITY_ATTRIBUTES结构的指针。如果为NULL,则新线程和创建线程具有同样的安全属性。 线程的优先级 THREAD_PRIORITY_ABOVE_NORMAL 比正常优先级高一个级别 THREAD_PRIORITY_BELOW_NORMAL 比正常优先级低一个级别 THREAD_PRIORITY_HIGHEST 比正常优先级高两个级别 THREAD_PRIORITY_IDLE 基本优先级为1。 对于REALTIME_PRIORITY_CLASS进程,优先级为16 THREAD_PRIORITY_LOWEST 比正常优先级低两个级别THREAD_PRIORITY_NORMAL 正常优先级别 THREAD_PRIOR
文档评论(0)