`
frenchmay
  • 浏览: 232621 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

The Microsoft Threading Model 微软的多线程模型

阅读更多
windows线程分为GUI线程和worker线程。
GUI线程负责建造窗口以及处理主消息循环,worker负责执行纯粹运算工作。
GUI线程的定义是:拥有消息队列的线程,任何一个特定窗口的消息总是被产生这一窗口的线程抓到并处理,所有对此窗口的改变也都应该由该线程完成。
如果worker线程也产生一个窗口,那么就会有一个消息队列随之被产生出来并且附着到此线程上,于是worker线程变成了GUI线程。这里意思是,worker线程不能够产生窗口,对话框,消息框,或任何其他与UI有关的东西。
    pInfo = HeapAlloc(GetProcessHeap(),
                      HEAP_ZERO_MEMORY,
                      sizeof(ThreadPrintInfo));

    // free data structure passed in.
    HeapFree(GetProcessHeap(), 0, pInfo);

GetTickCount()

Critical Sections (临界区)
Critical Sections 不是核心对象,因此没有handle这样的东西。和核心对象不同,它存在于进程的内存空间内。
初始化 InitializeCriticalSection()
释放   DeleteCriticalSection()

EnterCriticalSection()

LeaveCriticalSection()

最小锁定时间
不要长时间锁住一份资源
不要在一个Critical Section之中调用sleep或者任何wait...函数
当以一个同步机制保护一份资源时,这项资源被使用的频率如何?线程必须多快释放这份资源,才能确保整个程序的运作很平顺。

避免Dangling Critical Sections
Critical Section的一个缺点是:没有办法获知进入 Critical Section的那个线程是死是活。由于 Critical Section不是核心对象,如果进入 Critical Section的那个线程结束或者当掉了,而没有调用leave Critical Section的话,系统没有办法将该 Critical Section清楚,如果需要那样的功能,应该使用mutex


分享到:
评论

相关推荐

    多线程队列

    在.NET框架中,可以使用`System.Threading.Tasks.ConcurrentQueue<T>`实现多线程队列;在C++中,可以使用`std::queue`配合`std::mutex`和`std::condition_variable`实现;在Java中,`java.util.concurrent`包下的`...

    COM技术内幕——微软组件对象模型

    4. **线程模型**:COM支持单线程和多线程组件,不同的线程模型会影响组件的并发行为。了解 apartment threading 模型和 free threading 模型是理解COM多线程的关键。 5. **注册与定位**:COM组件在系统中的注册使得...

    用DELPHI建立多线程COM服务器 详解

    COM是微软提出的一种组件编程模型,允许不同语言编写的对象之间进行交互,而多线程则可以提高应用程序的并发处理能力。 首先,我们需要了解COM的基本概念。COM是一种二进制标准,定义了对象如何暴露其接口和服务给...

    visualize-object-model-3d 开线程显示3D点云

    在IT领域,尤其是在计算机图形学和可视化技术中,"visualize-object-model-3d 开线程显示3D点云"这个主题涉及到多个重要的知识点。3D点云是一种数据结构,它由大量的三维坐标点组成,通常用于表示物体或场景的表面。...

    COM技术内幕——微软组件对象模型.rar

    10. **线程模型(Threading Model)**:COM组件可以配置为支持不同的线程模型,如单线程公寓(STA)、多线程公寓(MTA)或自由线程(Free)。 11. **事件(Events)**:COM通过接口支持事件发布和订阅,使得组件...

    master COM development 微软MCSD教程

    5. **COM线程模型**:COM支持多线程访问,理解Free Threaded、Apartment Threading(STA)和Neutral Threading模型以及如何选择合适的模型对于确保组件的线程安全至关重要。 6. **事件和接口继承**:COM支持事件...

    visual c++ com编程

    7. **线程模型和多线程安全性**:理解COM组件的线程模型,如Apartment Threading(公寓模型)、Free Threading(自由线程模型)和Neutral Threading(中立线程模型),以及如何处理多线程安全问题。 8. **延迟加载...

    潘爱民COM讲义.rar

    COM的另一个关键特性是“线程模型”(Threading Model)。线程模型定义了组件如何处理来自不同线程的请求,包括单线程 Apartment(STA)、多线程 Apartment(MTA)和自由线程 Marshaling(Free)。选择正确的线程...

    COM原理与应用(入门经典)

    5. **线程模型**:COM支持多种线程模型,如Apartment Threading(STA,单线程公寓)和Free Threading(MTA,多线程公寓)。STA主要用于UI组件,MTA则适合后台服务或无UI的组件。 6. **安全性**:COM提供了一种称为...

    COM 原理与应用(源码)

    Apartment模型主要用于单线程环境,而Free Threading则允许组件在多线程环境中工作。了解这些线程模型对于正确地设计和使用COM组件至关重要。 另外,COM组件可以通过接口的事件模型支持事件通知。这种模型通常使用...

    Visual C++ 实践与提高COM和COM+篇源代码

    5. **线程模型(Thread Model)**:COM支持多线程访问,如Apartment Threading(线程公寓模型)和Free Threading(自由线程模型),线程模型决定了组件如何处理跨线程调用。 6. **安全性(Security)**:COM提供了...

    com本质论 潘爱民

    有几种线程模型,如Apartment Threading(公寓式线程)和Free Threading(自由式线程),它们决定了组件如何处理来自不同线程的调用。 此外,COM支持组件的版本管理和类型库,使得组件可以透明地升级和更新。类型...

    com原理与应用 书和代码 潘爱民

    4. **线程模型(Threading Model)**:COM支持多种线程模型,如单线程 apartment(STA)、多线程 apartment(MTA)和自由线程(Free)等,用于处理多线程环境下的组件调用。 5. **组件注册(Registration)**:COM...

    com组件学习com组件学习

    线程模型决定了组件如何在多线程环境中工作,以确保线程安全和正确性。 C++是COM组件开发的主要语言,使用C++开发COM组件通常会用到 ATL(Active Template Library)或者MFC(Microsoft Foundation Classes)。ATL...

    COM 原理与应用例子代码

    6. **线程模型(Threading Model)**:COM支持多线程访问,线程模型决定了对象如何处理并发访问,如Apartment Threading、Free Threading等。 7. **延迟绑定(Late Binding)**:通过QueryInterface动态获取接口,...

    COM+实战(转载)

    COM+是微软的组件对象模型(Component Object Model)的一个扩展,它提供了一种集成服务的环境,包括事务处理、安全性、生命周期管理等,使得在多层应用中开发组件更为便捷。 在这个实战项目中,作者以订单维护为例...

    com本质论及其源码

    5. **线程模型(Threading Model)**:COM支持多线程访问,通过设置线程模型,如Apartment Threading或Free Threading,来决定组件如何处理并发访问。 6. **接口版本控制(Versioning)**:COM允许接口版本升级,新...

    COM 组件 (MFC 篇)、COM原理与应用

    5. **线程模型(Threading Model)**:COM组件有多种线程模型,如Free、Apartment、Neutral、Both等,用于处理多线程环境下的访问规则。 6. **接口指针(Interface Pointer)**:COM接口使用IUnknown接口作为所有...

    COM实用入门教程PPT_阙海忠8讲全

    COM支持多种线程模型,如Apartment Threading(线程公寓)、Free Threading(自由线程)和Neutral Threading(中立线程)。这一讲将解释这些模型的差异,以及如何选择合适的线程模型以确保组件的线程安全。 第七讲...

    COM本质论.rar

    6. **线程模型**:COM支持多线程访问,定义了不同的线程模型,如Apartment Threading(线程公寓模型)和Free Threading(自由线程模型),以确保跨线程操作的正确性。 7. **CLSIDs与IID**:每个COM组件都有一个唯一...

Global site tag (gtag.js) - Google Analytics