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`包下的`...
4. **线程模型**:COM支持单线程和多线程组件,不同的线程模型会影响组件的并发行为。了解 apartment threading 模型和 free threading 模型是理解COM多线程的关键。 5. **注册与定位**:COM组件在系统中的注册使得...
COM是微软提出的一种组件编程模型,允许不同语言编写的对象之间进行交互,而多线程则可以提高应用程序的并发处理能力。 首先,我们需要了解COM的基本概念。COM是一种二进制标准,定义了对象如何暴露其接口和服务给...
在IT领域,尤其是在计算机图形学和可视化技术中,"visualize-object-model-3d 开线程显示3D点云"这个主题涉及到多个重要的知识点。3D点云是一种数据结构,它由大量的三维坐标点组成,通常用于表示物体或场景的表面。...
10. **线程模型(Threading Model)**:COM组件可以配置为支持不同的线程模型,如单线程公寓(STA)、多线程公寓(MTA)或自由线程(Free)。 11. **事件(Events)**:COM通过接口支持事件发布和订阅,使得组件...
5. **COM线程模型**:COM支持多线程访问,理解Free Threaded、Apartment Threading(STA)和Neutral Threading模型以及如何选择合适的模型对于确保组件的线程安全至关重要。 6. **事件和接口继承**:COM支持事件...
7. **线程模型和多线程安全性**:理解COM组件的线程模型,如Apartment Threading(公寓模型)、Free Threading(自由线程模型)和Neutral Threading(中立线程模型),以及如何处理多线程安全问题。 8. **延迟加载...
COM的另一个关键特性是“线程模型”(Threading Model)。线程模型定义了组件如何处理来自不同线程的请求,包括单线程 Apartment(STA)、多线程 Apartment(MTA)和自由线程 Marshaling(Free)。选择正确的线程...
5. **线程模型**:COM支持多种线程模型,如Apartment Threading(STA,单线程公寓)和Free Threading(MTA,多线程公寓)。STA主要用于UI组件,MTA则适合后台服务或无UI的组件。 6. **安全性**:COM提供了一种称为...
Apartment模型主要用于单线程环境,而Free Threading则允许组件在多线程环境中工作。了解这些线程模型对于正确地设计和使用COM组件至关重要。 另外,COM组件可以通过接口的事件模型支持事件通知。这种模型通常使用...
5. **线程模型(Thread Model)**:COM支持多线程访问,如Apartment Threading(线程公寓模型)和Free Threading(自由线程模型),线程模型决定了组件如何处理跨线程调用。 6. **安全性(Security)**:COM提供了...
有几种线程模型,如Apartment Threading(公寓式线程)和Free Threading(自由式线程),它们决定了组件如何处理来自不同线程的调用。 此外,COM支持组件的版本管理和类型库,使得组件可以透明地升级和更新。类型...
4. **线程模型(Threading Model)**:COM支持多种线程模型,如单线程 apartment(STA)、多线程 apartment(MTA)和自由线程(Free)等,用于处理多线程环境下的组件调用。 5. **组件注册(Registration)**:COM...
线程模型决定了组件如何在多线程环境中工作,以确保线程安全和正确性。 C++是COM组件开发的主要语言,使用C++开发COM组件通常会用到 ATL(Active Template Library)或者MFC(Microsoft Foundation Classes)。ATL...
6. **线程模型(Threading Model)**:COM支持多线程访问,线程模型决定了对象如何处理并发访问,如Apartment Threading、Free Threading等。 7. **延迟绑定(Late Binding)**:通过QueryInterface动态获取接口,...
COM+是微软的组件对象模型(Component Object Model)的一个扩展,它提供了一种集成服务的环境,包括事务处理、安全性、生命周期管理等,使得在多层应用中开发组件更为便捷。 在这个实战项目中,作者以订单维护为例...
5. **线程模型(Threading Model)**:COM支持多线程访问,通过设置线程模型,如Apartment Threading或Free Threading,来决定组件如何处理并发访问。 6. **接口版本控制(Versioning)**:COM允许接口版本升级,新...
5. **线程模型(Threading Model)**:COM组件有多种线程模型,如Free、Apartment、Neutral、Both等,用于处理多线程环境下的访问规则。 6. **接口指针(Interface Pointer)**:COM接口使用IUnknown接口作为所有...
COM支持多种线程模型,如Apartment Threading(线程公寓)、Free Threading(自由线程)和Neutral Threading(中立线程)。这一讲将解释这些模型的差异,以及如何选择合适的线程模型以确保组件的线程安全。 第七讲...
6. **线程模型**:COM支持多线程访问,定义了不同的线程模型,如Apartment Threading(线程公寓模型)和Free Threading(自由线程模型),以确保跨线程操作的正确性。 7. **CLSIDs与IID**:每个COM组件都有一个唯一...