- 1、本文档共72页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十一章cBuilder高级应用
C++Builder 6 程序设计教程 第十一章 C++Builder 高级应用 11.1 多线程应用程序 11.1.1 进程与线程 进程:可并发的程序在一数据集合上的运行过程,是操作系统进行资源分配和调度的一个独立单位。进程是由私有的虚拟地址空间、代码、数据和其他各种系统资源组成的。 线程:进程中的一个实体,是被系统独立调度和分派的基本单位 线程的分类: 用户界面线程:通常用来处理用户的输入并响应各种事件和消息 工作线程(又称为后台线程):来执行程序的后台处理任务,比如计算、调度和对设备的读写操作等 进程和线程示例 11.1.2 利用Win32 API编写多线程应用程序 利用Win32 API来编写多线程应用程序的一般步骤如下: (1) 编写一个线程的执行函数 (2) 创建并执行线程 (3) 控制线程的运行(挂起或唤醒线程) (4) 结束线程 创建线程的执行函数 所有线程必须从一个指定的函数开始执行,该函数称为线程函数,它必须具有下列原型: DWORD WINAPI ThreadFunc( LPVOID lpThreadParm); 参数lpThreadParm可以是一个DWORD型的整数,也可以是一个指向一个缓冲区的指针,返回一个DWORD型的值 创建线程 一个进程的主线程是在进程创建时由操作系统自动生成,如果要让一个主线程创建它的辅助线程,可以调用CreateThread来完成。原型如下: HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程的安全属性 DWORD dwStackSize, //初始化线程栈的大小 LPTHREAD_START_ROUTINE lpStartAddress, //指向线程函数地址的指针 LPVOID lpParameter, //新线程的参数 DWORD dwCreationFlags, //创建的标志 LPDWORD lpThreadId //返回线程的标识符指针 ); 参数意义 lpThreadAttributes:是一个指向SECURITY_ATTRIBUTES结构的指针。如果想让对象为缺省安全属性的话,可以传一个NULL;如果想让任一个子进程都可继承该线程对象句柄,必须指定一个SECURITY _ATTRIBUTES结构,其中bInheritHandle成员初始化为TRUE dwStackSize:是线程为自己所用堆栈分配的地址空间大小,0表示采用系统缺省值 lpStartAddress:是新线程开始执行时代码所在函数的地址,即为线程函数 lpParameter:是传给线程函数的参数 dwCreationFlags:是指定控制线程创建的附加标志,可以取两种值。如果该参数为0,线程就会立即开始执行;如果该参数为CREATE_SUSPENDED,则系统创建线程后,并不马上执行,而是挂起该线程,直到调用ResumeThread函数 lpThreadId:是一个DWORD类型地址,返回该新线程的ID值 函数调用成功,返回值为新线程的句柄,否则为NULL 终止线程 (1)在线程内调用ExitThread函数,就可以终止自身。原型: VOID ExitThread( DWORD dwExitCode // 线程的退出代码 ); 该函数为调用它的线程设置了退出码dwExitCode后,就终止并清除该线程使用的系统资源 (2)在线程外通过调用TerminateThread函数强行终止一个线程。原型: BOOL TerminateThread( HANDLE hThread, // 线程的句柄 DWORD dwExitCode // 线程的退出代码 ); 该函数用来结束由hThread参数指定的线程,并把dwExitCode设成该线程的退出码 设定线程的相对优先级 当一个线程被首次创建时,它的优先级等同于它所属进程的优先级。在单个进程内可以通过调用SetThreadPriority函数改变线程的相对优先级。一个线程的优先级是相对于其所属的进程优先级而言的。 BOOL SetThreadPriority( HANDLE hThread, //线程的句柄 int nPriority // 线程优先级 ); 其中参数hThread是指向
文档评论(0)