클래스 선언.

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가 소멸될 때 원래 설정으로 되돌림.

[ Form 생성 ]

Constructor()

OnCreate()

OnShow()

OnActivate()

OnCanResize()

OnConstrainedResize() 
OnResize()

OnPaint()

 

[ Form 소멸 ]
▶ MainForm의 Close() 함수 호출 또는 x(닫기) 버튼 클릭시
OnCloseQuery()

OnClose()

OnHide() ← TApplication이 소멸되는 시점

OnDestroy()
 
MainForm이 아닌 Form의 Close() 함수 호출 또는 x(닫기) 버튼 클릭시 
OnCloseQuery()

OnClose()

OnHide()

OnDeactivate()

Memory에서 제거되지 않은 상태임.
Form이 닫힐 때 Memory에서 제거하려면 OnClose 이벤트에서 Action = caFree를 추가하면 OnDestroy() 이벤트가 발생하며 delete 됨.


▶ MainForm을 delete 하는 경우
OnHide()

OnDestroy()

TApplication은 소멸되지 않음. (프로세스는 살아 있는 상태)

 

▶ MainForm이 아닌 Form을 delete 하는 경우
OnHide()

OnDestroy()

 

http://cbuilder.borlandforum.com/ 에서 보고 남겼던 자료를 정리함.

원문글은 찾지 못함.

Version : XE10.1 Berlin

 

1. Project Manager에 등록된 프로젝트들의 Target Platforms가 통일되지 않은 경우.

   - 특정 상황에서 발생하는 것으로 보이나 일반적으로는 Target Platforms가 달라도 잘 실행됨.

 

2. 디버거 자체가 로컬로 디버깅시에도 Socket을 사용하기 때문에 Socket의 내부 오류로 인해 발생할 수 있음.

   - 리모트 디버깅 중인 경우 리모트 상태인 PC와 로컬 PC 모두 아래 명령어 실행

   - 로컬 디버깅 중인 경우 로컬 PC만 실행.

   - 관리자권한으로 Command 창 실행하여 아래 코드 입력

     netsh winsock reset 

   - 실행 후 재부팅.

Version : XE10.1 Berlin

Tools > Options > Debugger Options > Embarcadero Debuggers

Debug spawned processes 체크

 

'개발 > C++Builder' 카테고리의 다른 글

Single Core 에서 함수 실행  (0) 2020.08.25
Form 생성 및 소멸 순서  (0) 2020.08.25
디버깅시 Disconnected session 조치  (0) 2020.08.18
TDateTime 의 double type 의미  (0) 2020.08.17

double 0 = 1899년 12월 30일 0시
1시간 = 1/24
1분 = 1/24/60
1초 = 1/24/60/60

+ Recent posts