#include <mswsock.h>

#pragma comment(lib,"mswsock.lib")



모든 윈도우에서 사용되는 리소스는 커널오브젝트라는 것을 가진다.

이 커널 오브젝트는 2가지 상태값을 가지게 되는데, 시그널 상태 논시그널 상태이다.

CreateEvent함수는 개체를 시그널 or 논시그널로 핸들을 생성할 수 있다.

그리고 WaitForSingleObject함수로 CreateEvent에서 생성한 핸들이 시그널이 될때까지 기다리게 할 수 있다.


SetEvent는 핸들의 시그널 값을 논시그널에서 시그널로 바꿔주는 역할을 한다.


예제>

HANDLE WowEvent;

DWORD WINAPI ThreadProc(LPVOID lpParam)

{

Sleep(5000);

SetEvent( WowEvent ); // 3) 5초후 WowEvent 시그널 상태로 변경한다.

return 0;

}


int _tmain(int argc, _TCHAR* argv[])

{

DWORD ID = 0;

CreateThread(NULL, 0, ThreadProc, NULL, 0, &ID);

WowEvent = CreateEvent(0, FALSE, FALSE, 0); // 1) WowEvent를 논시그널 상태로 생성한다.


  WaitForSingleObject(WowEvent, INFINITE); // 2) WowEvent가 시그널 상태로 되기를 기다린다.


// 4) WaitForSingleObject를 빠져나온다.


return 0; 

}


원본자료: 링크1, 링크2


요약


#include "stdafx.h"

#include <crtdbg.h> 


class CMemLeak

{

public:

CMemLeak()

{

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_DELAY_FREE_MEM_DF);


// 메모리 누수 난곳 찾아주는 함수

// _CrtSetBreakAlloc(108);

// 

// 다음과 같이 오류가 났을 떄 {} 안에 있는 값을 _CrtSetBreakAlloc 인자로 넣어주면 됨

// Dumping objects ->

// {108} normal block at 0x000987E8, 4 bytes long.

// Data: <    > CD CD CD CD 

}

};

CMemLeak MemLeak;


int _tmain(int argc, _TCHAR* argv[])

{

// 전체 메모리를 검사해서 동적 메모리 할당이 깨지거나, 삭제된 포인터에 접근한 걸 확인, 중간 중간에 넣어주자

_ASSERTE( _CrtCheckMemory( ) );


return 0; 

}


외국: 링크

국내: 링크


직선과 직선 교차 판정

사격형과 직선의 교차 판정 등

선분과 점의 위치 관계를 리턴해 준다. 선분의 왼쪽에 있을 경우 음수를 리턴하고, 오른쪽에 있을 땐 양수, 동일하면 0


static float LinePointRightSide(float fstart_x, float fstart_y, float fend_x, float fend_y, float fpoint_x, float fpoint_y)

{

return (fend_x-fstart_x)*(fpoint_y-fstart_y)-(fpoint_x-fstart_x)*(fend_y-fstart_y);

}

참고로 이 함수 수행속도가 굉장히 느리므로 다른 방법을 강구하기를 추천...

저 같은 경우는 선분과 점의 위치 관계를 리턴해주는 함수를 4번 사용 함


BOOL BTriangle::PtInTriangle( POINT *Verts, POINT pt )
{
     HRGN hRgn =CreatePolygonRgn( Verts, 3, WINDING); // 핵심..정점수만큼의 Region 영역을 생성..

    if( PtInRegion( hRgn, pt.x, pt.y ) )
    {
        DeleteObject( hRgn );
        return TRUE;
    }
 
    DeleteObject( hRgn );
    return FALSE;
}


참고자료: 링크1, 링크2

map, cod 파일 생성하기


[cod 생성]


[map 생성]


출처:링크

디버그 할 때 메시지 박스를 띄우거나 콘솔창에 계속 찍는건 제약이 많다.


이럴 경우, 디버그 뷰어를 이용하면 좋다.


OutputDebugString 함수를 이용하면 확인해보고 싶은 것을 디버그 뷰어로 볼 수 있다.


디버그 뷰어는 따로 받아야 하는데 -> www.sysinternals.com


여기서 Sysinternals Suite를 누르면 http://technet.microsoft.com/en-us/sysinternals/bb842062 이 페이지가 나오는데,


Sysinternals Suite를 다운 받아서 압축을 풀면, 그 안에 Debug View가 있다.


이를 켜놓고, 내가 만든 실행파일을 실행하면 디버그 하는데 유용하다


원본링크


위에서 들어가서 받기 귀찮으면 아래있는거 그냥 다운 받으면 된다.

DebugView 이외에도 유용한 툴들이 많다.


SysinternalsSuite.7z


자신의 휴면 계좌 찾기


http://www.sleepmoney.or.kr/default_cust.jsp

http://blog.naver.com/eomspink

+ Recent posts