zoukankan      html  css  js  c++  java
  • ATL 引用计数线程模型

    只为记录

    1. CComSingleThreadModel Provides methods for incrementing and decrementing a variable. Does not provide a critical section.
    2. CComMultiThreadModel Provides thread-safe methods for incrementing and decrementing a variable. Provides a critical section.
    3. CComMultiThreadModelNoCS Provides thread-safe methods for incrementing and decrementing a variable. Does not provide a critical sectio
    4. CComObjectThreadModel Determines the appropriate threading-model class for a single object class.
    5. CComGlobalsThreadModel Determines the appropriate threading-model class for an object that is globally available.

    image

    class CComMultiThreadModelNoCS
    {
    public:
        static ULONG WINAPI Increment(_Inout_ LPLONG p) throw()
        {
            return InterlockedIncrement(p);
        }
        static ULONG WINAPI Decrement(_Inout_ LPLONG p) throw()
        {
            return InterlockedDecrement(p);
        }
        typedef CComFakeCriticalSection AutoCriticalSection;
        typedef CComFakeCriticalSection AutoDeleteCriticalSection;
        typedef CComFakeCriticalSection CriticalSection;
        typedef CComMultiThreadModelNoCS ThreadModelNoCS;
    };
    
    class CComMultiThreadModel
    {
    public:
        static ULONG WINAPI Increment(_Inout_ LPLONG p) throw()
        {
            return InterlockedIncrement(p);
        }
        static ULONG WINAPI Decrement(_Inout_ LPLONG p) throw()
        {
            return InterlockedDecrement(p);
        }
        typedef CComAutoCriticalSection AutoCriticalSection;
        typedef CComAutoDeleteCriticalSection AutoDeleteCriticalSection;
        typedef CComCriticalSection CriticalSection;
        typedef CComMultiThreadModelNoCS ThreadModelNoCS;
    };
    
    class CComSingleThreadModel
    {
    public:
        static ULONG WINAPI Increment(_Inout_ LPLONG p) throw()
        {
            return ++(*p);
        }
        static ULONG WINAPI Decrement(_Inout_ LPLONG p) throw()
        {
            return --(*p);
        }
        typedef CComFakeCriticalSection AutoCriticalSection;
        typedef CComFakeCriticalSection AutoDeleteCriticalSection;
        typedef CComFakeCriticalSection CriticalSection;
        typedef CComSingleThreadModel ThreadModelNoCS;
    };
    
  • 相关阅读:
    Windows下利用TortoiseSVN搭建本地SVN服务器
    我的Netty笔记
    Netty简单的HTTP服务器
    开启和关闭HBase的thrift进程
    java中重载和重写的区别
    java中形参个数可变的方法使用
    java中方法的参数传递机制
    Java内存分配全面浅析
    java中的类修饰符、成员变量修饰符、方法修饰符。
    js实现页面重定向
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/2674784.html
Copyright © 2011-2022 走看看