黑客手册第十五课 多线程编程
6页1、黑客手册第十五课 多线程编程本课中,我们将学习如何进行多线理编稽。另外我们还将学习如何在不同的线理间进行通理论:前 课中,我们学习了进程,其中讲到每个进程至少要有个主线稽。这个线理其实是进 程执行的 条线索,除此主线理外您还可以给进程增加其它的线稽,也即增加其它的执行线 索,由此在某种程度上可以看成是给个应用程序增加了多任务功能。当程序运行后,您可 以根据各种条件挂起或运行这些线稽,尤其在多CPU的环境中,这些线程是并发运行的。这些 是在W32下才有的概念,在WIN16下并没有等同的概念。在同 进程中运行不同的线梧的好处是这些线稽可以共享进程的资源,如全局变量、资源 等。当然各个线程也可以有自己的私有校用于保存私有数据。另外每个线理需要保存其运行 上下文以便在线理切换时能够记住或恢复其上下文,当然这是由操作系统来完成的,对于用 户是透明的。我们大体上可以把线理分成两大类:1.处理用户界面的线理:该类线理产生自己的窗口并负责处理相关的窗口消息。用户界面 线理遵守WIN16下的互斥原则,即没刻仅有个用户界面线理使用USER和GDI库中的内 核函数,也就是说当个用户界面程序在进入GDI 或U
2、SER中时,内核不允许重入。由此 我们可以推论出WIN95的该部分内核的代码是遵守16位模式的。而WINOWS NT是纯的32位 操作系统,所以不存在这个问题。2. 工作者线理:该类线理不用处理窗口界面,当然也就不用处理消息了。它 般都运行在 后台干 些计算之类的粗,这大概也是把它叫做工作者线梧的原因吧。运用W32的多线理模式来编程,我们可以遵循某种策略:即让主线理仅来做用户界面的工作, 而其它繁重的工作则交由工作者线埋在后台完成。这就好比我们日常生活中的许多例子。譬 如:政府管理者好比是用户界面线稽,它负责昕取民意,给职能部门分配工作,然后把工作 成果汇报给公众。而具体的职能部门就是工作者线稽,它负责完成下达的具体工作。如果让 政府管理这来具体地做每件事,它必须作件事后再做另 页,那它就不能及时来昕取和 反馈民意。这样就无法管理好个国家了。当然即使采用多线理制,政府管理部门也不 定 就能管理好国家,但是程序却可以采用多线理机制来管理好她自己的工作。我们可以调用 CreateThread函数来生成新线稽。该函数的语法如下:CreateThread proto 1pThreadAttri
3、butes:DWORD,dwStackSize:DWORD,1pStartAddress:DWORD,1pParameter:DWORD,dwCreationF1ags:DWORD,1pThreadld:DWORD生成个线梧的函数和生成个进程基本相同。1pThreadAttributes -如果您想要线理有缺省的安全属性,可以置该值为NULLdwStackSize -指定线梧的堆校大小。如果为0 ,那线梧的大小和进程相同。1pStartAddress- 线理函数的起始地址。注意该函数仅接收个32位的参数和返回 个32位的值。(该参数可以是 个指针,而且进程的线稽可以直接存取进程定义全局变量,所以fg大可不必担心不能如何把大量的参数传递给线理)。1pParameter -传递给线梧的上下文。dwCreationF1ags -如果是0的话则表示创线程建后立即启动,相反的是标志位CREATE SUSPENDED,这样您需要稍后显示地让该线程运行。1pThreadld -内核给新生成的线理分配的线理ID。如果生成线理成功的话,CreateThread函数就返回新线梧的句柄。否则返回NULL。
4、如果没有给参数dwCreationF1ags指定CREATE SUSPENDED的话,该线程就会立即运行。如果不 这样,我们上面说了,需要显示地启动该线稽,要这样做您需要调用ResumeThread函数。 在线理返回后(线梧的执行类似与执行 个函数,如果它调用了最后条指令后,在汇编中 是ret ,那么该线程就结束了,除非您让它进入个循环,譬如我们讲的用户界面线程就是如 此,只不过它不退出的原因是进入的循环是在 whi 1e ( GetMessage (. ) ).中,如果您 没有给它传递 个值为0的消息,那它可不会退出) ,系统会自动调用ExitThread函数透明地 处理线理 些退出时的清理工作。当然您可以自己调用该函数,但似乎没有什么意义。要得 到退出时的退出码,您可以调用GetExitCodeThread函数。如果您想结束 个程序,可以调用TerminateThread函数,不过使用该函数要小心行事,因为 该函数 旦被调用线程就会退出,这样它就没有机会来做清理自己的工作了。现在我们来看看线理间的通讯机制。 总的说来共有三种方法:.使用全局变量.使用Windows消息传递机制.使用
《黑客手册第十五课 多线程编程》由会员壹****1分享,可在线阅读,更多相关《黑客手册第十五课 多线程编程》请在金锄头文库上搜索。
美发助理年终工作总结模板(2篇).doc
计算机求职信四篇
场地硬化施工方案(工程科)
银行承兑汇票和商业承兑汇票的回款问题
“修改病句”教学案(教师版)
最新农村宅基地合作建房协议
湖南省张家界市永定区八年级物理下学期期中教学质量检测试题新人教版052
工程项目招投标与合同管理岗位实践报告
抽象函数问题的“原型”解法
初中八年级英语教学总结五篇
2023年气排球竞赛规则
东莞视觉检测装备研发项目建议书模板参考
JJ 交通工程施工图设计说明
合同中常见的陷阱,千万要防范!
对流给热系数的测定实验
小学三年级语文人教版下册期末测试卷及参考答案
第一章 电控发动机组成与作用
翻译法在对外汉语语法教学中的新探教育文档
最新人教版六年级上册小学数学第五单元《圆》测试卷(含答案解析)(DOC 9页)
个人股份转让协议
2023-04-30 39页
2023-02-21 4页
2022-12-27 4页
2022-09-11 13页
2022-10-18 5页
2023-05-17 4页
2023-12-01 6页
2022-07-28 7页
2023-04-24 36页
2023-12-25 57页