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;
    };
    
  • 相关阅读:
    poj3718 Facer's Chocolate Dream
    codeforces 917D Stranger Trees
    uoj#349 【WC2018】即时战略
    bzoj5153 [Wc2018]州区划分
    bzoj5152 [Wc2018]通道
    loj2001[SDOI2017]树点染色
    loj2000[SDOI2017]数字表格
    Atcoder arc092
    bzoj4826[hnoi2017]影魔
    bzoj4827 [hnoi2017]礼物
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/2674784.html
Copyright © 2011-2022 走看看