- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
套间与线程-Read
九 COM多线程模型 1 线程的基本概念 进程(1。执行代码。2。进程专用的系统堆栈空间。3。户口。内核对象,进程控制块 PCB task_struct. 4.独立的存储空间) 线程 (前3点)参与调度的实体, 不同的操作系统对其处理的方式不一样. 工人线程(自由线程,辅助线程):有一个线程函数,执行完后,线程结束。 一般的控制台程序、DOS程序等等。 UI线程(User Interface):线程中有一个窗口,窗口有一个窗口过程。窗口创建完毕后进入消息循环,无限循环地读取消息,分发消息。窗口过程对消息进行处理,直到接受到退出消息为止。所有的窗口消息,无论来自何方,都被串行化,按照一定的顺序被处理。 一般的GUI用户界面程序。 多线程 一个进程启动后有一个主线程。此线程有可能是工人线程,也有可能是UI线程。无论哪种情形下,主线程都可以再创建新的线程。新线程有可能是UI线程,也有可能是工人线程。而且主线程可以创建多个UI或工人线程。新创建的线程可以再创建更多的别的线程。(操作系统对线程的数量有限制。Windows 2k 约2500个) 线程的同步 临界区 互斥 事件 信号量等诸多机制。(操作系统提供的同步原语) 线程安全 大量的类库使用了全局的或静态的变量。使得大多数函数是不可重入的,不是线程安全的。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提出了一个规范的抽象的概念Apartment(套间,单元)以前称为执行环境(execution context) 以下阐述套间,进程,线程,COM对象之间的关系. 套间与COM对象 套间定义了一组COM对象的逻辑组合,这些对象共享同一组并发性和重入特性。每个对象都属于某一个套间,对象所属的套间是这个对象的实体属性的一部分。不同套间的COM对象的线程特性有可能不同. 套间与进程 每一个使用COM的客户进程都有一个或多个套间。一个套间只能包含在一个进程中。每个套间中的COM对象都有同样的线程特性. 一个进程内部可能有不同线程特性的COM对象。 套间与线程 当一个线程要使用一个COM对象时,必须先进入一个套间. 当线程进入套间时,COM把这个关于套间的信息保存在线程局部存储(Thread Local Storage TLS)中,直至线程推出套间为止。任一时刻,一个线程只能在一个套间中运行。当然,它可以从某套间中退出,再进入另一个套间。 线程可以在套间中创建对象并访问之, 也可以访问其他线程在此套间中创建的对象. 总言之, 线程只有在对象所处的的套间中才能访问对象. .一个套间中的线程无法直接访问另一个套间中的对象.尽管都处于同一个进程内. 线程能够访问到对象所占用的内存. 如果线程不进入对象所处的套间,将无法访问它.(又:线程不能进入其他线程创建的STA,只能进入别的线程创建的MTA。在这种意义上,STA是一次性的,创建即进入,退出即销毁。) 3 STA和MTA 单线程套间(SingleThreaded Apartment STA) 多线程套间(MultiThreaded Apar
文档评论(0)