반응형

C++ 73

C++ Technical Report 1 (TR1) : Overview

C++ TR1은 C++ 표준 라이브러리에 대하여 새롭게 추가되는 라이브러리에 대한 기술 문서로서, 우리에게는 추가된 C++ 라이브러리를 의미합니다. 2005년 6월 24일에 제안된 문서가 현재 심사중에 있습니다. TR2은 C++0x가 나온 이후에 나올 것으로 예정되어 있습니다. TR1은 Visual Studio 2008 한글판과 같은 경우 Service Pack1을 깔면 쓸 수 있습니다. 이 버전에는 C99에 대한 호환성 부분과 수학라이브러리는 지원하지 않습니다. 또한 영문판과 같은 경우는 별도의 Feature Pack 2008을 다운받아서 깔아야 합니다. General Utilities Reference Wrapper (tr1::reference_wrapper) Boost.Ref에 기초합니다. 헤더에 ..

C++ 프로그래밍 2009.07.23

Visual Studio 2010에 적용 예정인 C++0x

우선 이 글은 MS Visual Studio Team System 2010 공식 팀 블로그 에 있는 내용을 한 페이지에 볼 수 있게 요약한 것입니다. 자의적으로 요약한 만큼 잘못된 설명이 존재할 수 있으며 좀 더 궁금한 부분은 해당 페이지를 참조하여 주시면 됩니다. auto 컴파일 시간에 컴파일러가 자동으로 타입을 유추하여 코드를 생성시켜 주는 새로운 키워드 입니다. 예제 보니 가장 많이 쓰일 곳이 STL 코드내일 듯 보입니다. for( auto IterPos = ItemCodeList.begin(); IterPos != ItemCodeList.end(); ++IterPos) { cout

C++ 프로그래밍 2009.07.21

Win32 ThreadPool

MSDN: Thread Pool API Thread Pool API에 대한 간략한 설명이 들어 있는 페이지 입니다. 이 페이지는 기본적으로 전 버전에서 지원하는 API들과 Window Vista에서 지원하는 새로운 Thread Pool API를 비교하며 설명하고 있습니다. 쓰레드 풀은 OS의 쓰레드 풀을 사용하는 것이고 Win2K부터 지원을 합니다. Thread Pool API라는 것은 OS Thread Pool에서 동작하는 API를 나열해 놓은 페이지 입니다. 그러니 API별 용도는 다릅니다. 이 글에서는 Original API를 바탕으로 하나씩 살펴볼까 합니다. 쓰레드 풀 쓰레드는 I/O 쓰레드와 non-I/O쓰레드 2가지 종류가 있습니다. I/O worker thread는 APC(Asynchrono..

OLE DB의 클래스 역활

CDataSource DBMS에 대한 연결 문자열, 즉 해당 DBMS에 대한 드라이브에 대한 연결을 제공하는 듯 보임 CSession 일종의 DB Connection임 CCommand Connection에 대하여 Query를 수행 한다. ..DBAccessor 자동으로 만들어지는 클래스로 컬럼에 대한 정보를 가지고 있다. CCommand객체로 Query시 이용한다. ..Accessor 자동으로 만들어지는 클래스로 컬럼에 대한 정보를 가지고 있다. .. : public CCommand 자동으로 만들어지는 클래스로 테이블형태의 억세스를 가능하게 해주는 클래스인 듯 보인다. CDBPropSet CCommand로 Query를 수행할 경우의 커서의 속성을 설정한다.

Fiber [beta]

파이버는 아래와 같은 단점을 가지고 있습니다.... 우선 처리가 적절하게 끝나야 합니다. 적절하게 끝나지 못하고 중간에서 Fiber Context Switching이 된 상태에서 끝나게 된 경우, 해당 Fiber Context에서 돌아가던 변수들이 클리어 되지 않습니다. 이것 때문에 애 먹었습니다. Compuware Error Detection으로 체크하는데 갑자기 Memory Leak과 Resource Leak이 나와 체크하였는데 결과적으로 실행하다가 프로그램 종료와 함께 종료된 Fiber Context에서 선언되고 사용되어진 Class들의 d'tor가 호출되지 않았습니다. 쩝... Thread관련 클래스에는 이상없이 클리어 되던 얘들인데... (상세한 조사는 하지 않고 버그만을 수정하였습니다.) --..

LUA Script

Lua는 가벼운 인터프린터 언어로 쉽고 가볍게 C/C++에 내장된(Embeded)다는 장점을 가지고 있으며, WOW의 유저UI용 스크립트 언어로도 유명하다. 많은 MMORPG용 서버엔진에서도 사용한다. 물론, 언어로는 메타, 멀티리턴값 같은 조금은 독특하고 머리아픈 기능도 가지고 있다. LUA v 5.1 Reference Manual http://www.lua.org/manual/5.1 루아 공식홈페이지 http://www.lua.org 루아 레드위키 http://www.redwiki.net/wiki/wiki.php/Lua 루아 사용자 모임 http://lua-users.org C# & Lua http://www.gamedev.net/reference/articles/article2275.asp http..

SetEvent(..) & 멀티쓰레드 버그

꽤나 재미있는 버그였다... int tst; //Thread#1 ... WaitForSingleObject(...); printf("%d", tst); ... //Thread#2 ... tst=3; SetEvent(...); tst=4; ... 이 상황에서 Thread#1이 Thread#2를 기다리다가 tst값을 찍을 경우, 찍히는 값은 3일까? 4일까? 이 코드는 전형적으로 시그널을 기다리는 코드로 Thread#1이 Thread#2의 시그널을 기다리고 있다. 그런데 중요한 것은 OS동작이다. 흔희 생각할수 있는, SetEvent(...) 호출한 후의 Context Switching은 바로 일어나지 않을 수도 있다. 이런경우 일정량 만큼 SetEvent(...) 이후의 코드가 실행되다가 Context S..

Win32 과연 어떤 Timer함수를 사용할 것인가?

이 글은 Code Project에 있는 Timers Tutorial을 정리한 것입니다. 우선, 윈도우는 윈도우 CE를 제외하면 리얼타임OS가 아닌 관계로 10ms와 같은 매우 작은 시간에 대한 정확한 처리를 요구하는 건 한계가 있답니다. (쥔장도 자세한 이유는 잘... 흠...) QueryPerformanceFrequency나 QueryPerformanceCounter와 같은 경우는 특정 시간 경과 후 이벤트를 처리하는 것이 주요 쓰임이 아니라 시간과 시간사이의 시간차를 계산하는 것이 주요 쓰임인 관계로 이 글에서는 언급되어 있지 않습니다. 반대로 말하면 시간과 시간사이의 차이를 정확히 측정하려면 QueryPerformanceFrequency를 사용하여야 겠죠? 1. Standard Win32 Timer..

First Chance Exception

SEH(Structured Exception Handler)가 처리하는 Structured Exception을 처리하는 과정에서 디버거가 제공해 주는 정보의 일종입니다. 제가 이해한 동작 메카니즘은 아래와 같습니다. 1. Exception 발생 2. 발생된 Exception 인식 3. First Chance Exception 메세지 발생 4. Exception Handling 5. if {Exception이 정상 처리?} 프로그램 계속 동작 else Second Chance Exception 메세지 발생 //Release모드로 컴파일되어서 작동시 프로그램 Crash를 의미함 내용을 읽다보면 이 API가 Win32API를 의미하는 것인지 유저가 만든 API를 의미하는 것인지 조금 모호하기는 합니다. 즉, ..

C++ 헤더파일에 선언할 수 있는 4가지 타입의 전역변수

최근에 헤더파일에서의 static 전역변수에 대한 포스트를 올렸다 지웠습니다. 생각지도 못한 버그를 만나 2시간이나 고생을 했기 때문이었는데, C/C++에서의 static 키워드는 여러모로 조심스러운 키워드인거 같습니다. 멀티쓰레드에서의 버그가능성까지... 이 글은 덕분에 테스트해 본 전역변수에 대하여 요약하여 놓은 것입니다. 참고로 테스트 환경은 Visual Studio 2008 sp1 입니다. object라는 클래스가 있다는 가정하에 헤더파일에 선언할 수 있는 4가지 타입의 전역변수는 아래와 같습니다. 1. object var; 2. static object var; 3. extern object var; //object var;라고 특정 cpp파일에 정의되어 있다고 가정합니다. 4. typedef ..

C++ 프로그래밍 2009.04.21

[STL] erase Story... beta

STL에서 가장 짜증나는 부분이 erase부분이 아닌가 싶다. erase와 remove의 차이점을 알아야 하고 거기에 몇 개 종류별 iterator의 erase 기법을 알아야 한다. 흠... 암기하기도 그렇고... 꽤나 귀찮은 것들 하나다. 그래서 찾아본 것을 정리하면 아래와 같습당... map's iterator erase 방법 // 1. 특정 조건에 따라 제거 map mp; for(map::iterator i=mp.begin(); i != mp.end(); ) { if( {조건문} ) { mp.erase( i++ ); } else { ++i; } } // 2. 전체 제거 map mp; for(map::iterator i=mp.begin(); i != mp.end(); ) { mp.erase( i++ ..

C++ 프로그래밍 2009.04.21

Lua R6034 Runtime Error in Visual Studio 2008 in Vista

증상 XP에서 잘 실행되던 소스가 Vista로 옮겨서 컴파일 하고 실행을 하려고 하니 R6034에러가 났다. 원인 Visual Studio 2008에서는 CRT(C RunTime, 일반적으로 컴파일러들이 자동으로 링크하는 기본 C라이브러리를 말함당)를 9.0버전을 사용한다. 하지만 내가 만들고 있던 루아스크립트 엔진이 참조하는 lua5.1.dll은 Visual Studio 2005의 CRT인 8.0버전을 사용한다. 뭐, XP에서는 그냥 루아 5.1버전과 같이 딸려오는 msvcr80.dll을 사용하면 되지만 Vista에서는 잘못된 CRT를 로드했다는 에러를 낸다. 아마도 Vista에선가, .Net에선가 dll 관리 정책의 변화떄문인 듯 보인다. 소위 말하여 WinSxS라는 거... 실행파일 (참조)-> L..

C/C++ 관련 유용한 글 링크 및 소개

가변인자 포워딩 시키기(http://www.jiniya.net/tt/599) int realsum(int count, ...) { // 인자들의 합을 구하는 작업들 return sum; } int mysum(int count, ...) { return realsum(count, ...); } 위의 코드와 같이 ...으로 표현되는 가변인자를 받아서 다른 가변인자 함수를 호출하는 코드가 나와 있습니다. 어셈블리까지 들어간 코드라서 추천하고 싶지도 구지 내용을 다 이해할 필요는 없는 듯 보이지만 필요할 때 Copy&Paste하면 요긴하게 사용할 수 있을 듯 보입니다.

반응형