- 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)