- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9 多线程模型课件
九 COM多线程模型;1 线程的基本概念;线程的同步 临界区 互斥 事件 信号量等诸多机制。(操作系统提供的同步原语) 线程安全 大量的类库使用了全局的或静态的变量。使得大多数函数是不可重入的,不是线程安全的。MFC,VCL,Motif等库函数大多不能在线程中直接使用。必须采取一些变通的办法,或者手工小心处理。 在VCL中,为了能在线程中使用VCL的类库。它提供了一个Synchronize函数,比如说在线程中访问窗口的属性: Synchronize(UpdateCaption); 而 UpdateCaption是: void __fastcall aaa::UpdateCaption() { Form1-Caption = “Updated in a thread”; } 实际上VCL在处理时把这一句Synchronize(UpdateCaption)临时挪到主线程中去执行了。 ;2 套间的概念;套间与COM对象 套间定义了一组COM对象的逻辑组合,这些对象共享同一组并发性和重入特性。每个对象都属于某一个套间,对象所属的套间是这个对象的实体属性的一部分。不同套间的COM对象的线程特性有可能不同. 套间与进程 每一个使用COM的客户进程都有一个或多个套间。一个套间只能包含在一个进程中。每个套间中的COM对象都有同样的线程特性. 一个进程内部可能有不同线程特性的COM对象。 套间与线程 当一个线程要使用一个COM对象时,必须先进入一个套间. 当线程进入套间时,COM把这个关于套间的信息保存在线程局部存储(Thread Local Storage TLS)中,直至线程退出套间为止。任一时刻,一个线程只能在一个套间中运行。当然,它可以从某套间中退出,再进入另一个套间。 线程可以在套间中创建对象并访问之, 也可以访问其他线程在此套间中创建的对象. 总言之, 线程只有在对象所处的的套间中才能访问对象. .一个套间中的线程无法直接访问另一个套间中的对象.尽管都处于同一个进程内. 线程能够访问到对象所占用的内存. 如果线程不进入对象所处的套间,将无法访问它.(又:线程不能进入其他线程创建的STA,只能进入别的线程创建的MTA。在这种意义上,STA是一次性的,创建即进入,退出即销毁。) ;单线程套间(SingleThreaded Apartment STA) 多线程套间(MultiThreaded Apartment) STA在任一时刻只允许一个线程运行。 MTA可以允许多个线程在其中同时运行。一个进程中最多只能有一个MTA。但可以有多个STA. STA 优点: 驻留在STA中的对象不会被并发地访问,而且只有一个特定的线程可以访问(即也不允许多个线程串行地访问)。因此,对象的实现者可以方便安全地把各个方法调用过程中的中间状态保存在线程局部存储区中。或者说对象的数据成员是线程安全的。 缺点: STA中如果有多个对象,对这些对象的调用也必须串行化地执行.因此,一个使用STA的可以并发访问的服务器,只好创建多个线程,每个线程创建一个套间,每个套间一个或多个对象.容易造成线程过多. MTA MTA中的对象可以被此套间的多个线程同时访问。因此对象的数据成员缺乏保护。对象的实现者必须给以安全性保护. 当MTA中有多个对象时, 或者是调用次数频繁时, COM可以动态地申请线程. 优缺点同STA相反. 进程,STA套间,MTA套间, 线程,COM对象示意图如下: ;进程,套间,线程,COM对象示意图;4 客户的套间;HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED); 进程中第一次调用此函数的线程将创建一个MTA,它在退出之前如果再次调用,将不起作用。其他线程如果调用此函数,将加入此MTA中。 进程中所有要加入MTA的线程都在此MTA中。要退出的线程调用void CoUninitialize(void); 。 线程要新建并进入STA,它应调用 HRESULT hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED); 此套间为此线程所私有,其他线程无法加入。同样,它若再次调用将不起作用。而CoUninitialize(void); 将使它退出套间。 CoInitialize(0)等价于CoInitializeEx(0, COINIT_APARTMENTTHREADED); HRESULT OleInitialize(void *pvRese
您可能关注的文档
最近下载
- 巨人 通力电梯NOVA GKE调试说明书故障代码GPN15 GVN15_GKE - 51668093D01-2022.pdf VIP
- 吕梁学院《高等数学下》2025 - 2026学年第一学期期末试卷(A卷).docx VIP
- 抖音超火看表情符号猜成语PPT.pptx VIP
- 德龙ICK6000冰淇淋机说明书.pdf
- 昂科威S用户手册.doc VIP
- DB45T12302015红树林湿地生态系统固碳能力评估技术规程.pdf VIP
- 难点详解人教版8年级数学上册《全等三角形》专项训练试题(解析卷).docx VIP
- 难点详解人教版8年级数学上册《全等三角形》专项训练练习题.docx VIP
- 铁路连续梁桥线形监控量测系统使用培训.pdf
- 麻醉危机管理情境模拟教学 .pdf VIP
文档评论(0)