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;
    };
    
  • 相关阅读:
    《梦断代码》读书计划
    四则运算3
    《梦断代码》读后感Ⅱ
    第二次结对开发
    首次结对开发
    四则运算2的测试
    四则运算2的任务完成时间表
    四则运算2
    《梦断代码》观后感1
    四则运算2的心路历程
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/2674784.html
Copyright © 2011-2022 走看看