클래스 선언.

class CSingleCore
{
public:
    class SingleCoreError
    {
    };
    
    ULONG_PTR oam_;
    
    CSingleCore() 
    {
        ULONG_PTR pam, sam;
        if (!GetProcessAffinityMask(GetCurrentProcess(), &pam, &sam))
            throw SingleCoreError();

        ULONG_PTR am = 1;
        int bits = CHAR_BIT * sizeof(am);

        for(int i=0; i<bits; ++i)
        {
            if(am & pam)
            {
                oam_ = SetThreadAffinityMask(GetCurrentThread(), am);
                if(!oam_)
                    throw SingleCoreError();
                break;
            }

            am <<= 1;
        }
    }

    CSingleCore::~CSingleCore() 
    {
        SetThreadAffinityMask(GetCurrentThread(), oam_);
    }
}

사용시

int func() 
{
    CSingleCore scTmp;
   
    int a = 1 + 2 + 3;
    return a;
}

CSingleCore가 생성될 때 SingleCore로 설정함.

함수를 빠져나가면서 CSingleCore가 소멸될 때 원래 설정으로 되돌림.

+ Recent posts