chap6-多线程编程技术讲稿.pptVIP

  • 4
  • 0
  • 约1.05万字
  • 约 57页
  • 2017-04-11 发布于湖北
  • 举报
计算机控制工程 计算机控制工程 第六章 多线程编程技术 计算机控制工程 Windows是一种多任务的操作系统。Windows中一个进程包含一个或多个线程。 第六章 多线程编程 Windows多线程编程方式: 1、Win32 API; 2、标准C库; 3、MFC类库; 目的:提高程序执行效率;提高用户体验; 计算机控制工程 第一节 多线程概述 多线程指在同一程序中同时执行多个任务或多个程序。这意味着用户可以将整个任务分成几个线程,然后让操作系统同时执行。 注意:虽然在微观上仍然是分时的,但这种调度策略确实能够提高CPU的利用率,从而提高程序的执行效率。 关键是理解线程与进程的概念。 计算机控制工程 第一节 多线程概述 A process with two threads of execution on a single processor. 计算机控制工程 第一节 多线程概述 1. 进程 进程是一个程序实例; 进程占据4GB地址空间,在该空间存放应用程序 执行所需要的各种资源; Win32进程没有活力,是静态的。 2. 线程 线程是CPU调度计算任务的最小单位; Win32进程创建时,会自动创建一个主线程; 主线程可以创建其它线程(辅助线程) 计算机控制工程 第一节 多线程概述 第一节 多线程概述 总体上来讲,进程占用资源比线程多得多。实际上线程只有一个内核对象和一个堆栈。开发人员应设法增加线程在解决编程问题。避免创建新的线程。 场合一:耗时操作可单独为其开辟一个线程,因为在主线程中执行这些操作会让用户体验差。 场合二:针对用户界面。线程可分为用户接口线程和工作者线程。用户接口线程不应该执行时长100ms以上的工作;工作者线程不应该处理用户界面。 工作线程不具备消息循环 计算机控制工程 第二节 线程的操作 线程创建步骤: 编写线程函数 (无特殊要求); 创建线程。 1. AfxBeginThread( )函数(MFC) MFC支持两种线程类型:工作者线程和用户接口线程 计算机控制工程 第二节 线程的操作 工作者线程: CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ); UINT __cdecl ThreadFunction( LPVOID pParam ) 计算机控制工程 第二节 线程的操作 用户接口线程: CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ); The RUNTIME_CLASS of an object derived from CWinThread. 计算机控制工程 第二节 线程的操作 2. CreateThread()函数(Win32 API) 计算机控制工程 第二节 线程的操作 3. _beginthreadex( )函数(C运行库) __cdecl调用协议 __stdcall调用协议 计算机控制工程 第二节 线程的操作 终止线程有三种方法: 线程函数自然退出; 使用退出函数; 使用TerminateThread()函数。 1. 线程函数自然退出 在线程函数内部设置某种条件,当该条件满足时,就不断执行该线程函数体;当条件不满足时,就退出线程函数体。当线程函数退出时,将使系统自动清除该线程所占用资源,然后正常退出。 计算机控制工程 第二节 线程的操作 2. 使用退出函数 在线程运行期间必须终止线程。此时只能在线程函数体内使用退出线程的函数。使用退出函数,可以保证资源能够正确释放。 AfxBeginThread() ? void AfxEndThread(UINT nExitCode) CreateThread() ? void ExitThread(DWORD dwExitCode) _beginthread() ?

文档评论(0)

1亿VIP精品文档

相关文档