반응형

TCHAR path[_MAX_PATH];

GetModuleFileName(NULL, path, sizeof(path));


CString strPath = path;  

int i = strPath.ReverseFind('\\');      // 실행파일 이름을 지우기 위해서 왼쪽에 있는 '/'를 찾는다.

strPath = strPath.Left(i);                    // 뒤에 있는 현재 실행파일 이름을 지운다.

반응형
반응형

프로세스(Process)

프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다. 프로세스 관리는 운영체제의 중요한 부분으로 자리잡혀 있다.

- 컴퓨터 내에서 실행중인 프로그램, 

- 할당받은 자신만의 자원을 가지고 CPU가 기계어 명령들을 실행함에 따라 끊임없이 변화하는 동적인 존재.

- 코드(Code), 데이터(Data), 힙(Heap), 스택(Stack)


스레드(Thread)

스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.

- 실제적으로 명령어가 CPU를 사용하여 실행되어지는 객체의 단위.

- 스레드는 같은 프로세스에 있는 자원과 상태를 공유.

- 코드, 데이터, 힙의 영역을 프로세스와 공유하면서 오직 프로그램 카운터, 레지스터, 스택을 스레드별로 갖게 된다.


프로세스와 스레드의 비교

멀티프로세스와 멀티스레드는 양쪽 모두 여러 흐름이 동시에 진행된다는 공통점을 가지고 있다. 하지만 멀티프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다. 또한 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.

멀티스레드의 다른 장점은 CPU가 여러 개일 경우에 각각의 CPU가 스레드 하나씩을 담당하는 방법으로 속도를 높일 수 있다는 것이다. 이러한 시스템에서는 여러 스레드가 실제 시간상으로 동시에 수행될 수 있기 때문이다.

멀티스레드의 단점에는 각각의 스레드 중 어떤 것이 먼저 실행될지 그 순서를 알 수 없다는 것이 있다.

 


출처:

http://kjw1801.tistory.com/81

http://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4

http://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C#.ED.94.84.EB.A1.9C.EC.84.B8.EC.8A.A4.EC.99.80_.EC.8A.A4.EB.A0.88.EB.93.9C.EC.9D.98_.EB.B9.84.EA.B5.90

반응형
반응형

Visual Studio 2008 CMFCShellTreeCtrl 사용하기

 - 기본적으로 제공해 주는 CTreeCtrl 은 이것저것 설정해줘야 하는 것이 많은데에 비해

   CMFCShellTreeCtrl 을 사용하면 윈도우 탐색기를 쉽게 구현가능하다.

   근데 이건 Visual Studio 2008 SP1 이 설치되어있어야 한다.

 - 사용법에 대해 잘 나타나있지 않아서 엄청난 삽질을 하고 있었는데, 드디어 해결!!


사용법은 간단하다. 

다이얼로그 기반일 경우: TreeControl 을 하면에 끌어다 놓고 아래처럼 사용하면 된다.

**Dlg.h

CMFCShellTreeCtrl m_cTreeCtrl;


**Dlg.cpp

OninitDialog() 함수안에

m_cTreeCtrl.SelectIem(m_cTreeCtrl.GetRootItem();

m_cTreeCtrl.SelectItem(L"C:\\");


이렇게 만 쓰면된다!!! 일줄 알았다. 근데 계속 에러가 나와서 인터넷 검색을 엄청해서 결국 해결했다.

에러가 난 이유는 초기화를 하지 않아서 이다.

초기화는 **App 에서 하면 떙~ 이렇게 간단한걸 삽질을 하다니...

모르는게 너무 많다...


**App 클래스 안에

InitInstance() 안에

InitShellManager(); 


요것만 써주면 오류없이 해결이 가능하다. 


반응형
반응형

함수를 만들어서 컴파일 하면 각각의 코드가 기계어로 번역되어 메모리 상의 어딘가에 저장된다.

그리고 이 함수를 호출하는 부분에는 그 함수가 위치한 메모리 번지가 저장된다.

프로그램을 실행하면 명령어가 차례로 수행되다가 함수를 호출하는 부분을 만나면, 

이 함수가 있는 메모리 번지로 점프를 해서 그 함수를 실행하고, 원래 위치로 되돌아 온다.

이와 같이 함수를 호출하는 부분에 함수가 위치한 메모리 번지를 연결시켜 주는 것을

바인딩이라고 한다. 함수를 바인딩 하는데는 두가지 방법이 있다. 

 1. 정적 바인딩

 2. 동적 바인딩


1. 정적 바인딩

일반적인 함수는 실행 파일을 만들 때 바인딩을 할 수 있다.

즉, 컴파일을 해서 실행파일을 만드는 단계에서 함수를 호출하는 부분과 그 함수가 저장되는 부분을 연결시킬 수 있다.

* 실행파일을 만들 때 호출될 함수로 점프할 번지가 결정되어 바인딩되는 것을 정적 바인딩이라고 한다.


2. 동적 바인딩

실행 파일을 만들 때는 바인딩이 되지 않고, 보류 상태로 두었다가 프로그램이 실행될 때 바인딩 되도록 할 수가 있다.

* 실행 파일을 만들 때는 호출될 함수로 점프할 번지를 결정하지 않고 빈칸으로 두었다가,

프로그램을 실행할 때 점프할 번지를 즉성에서 결정하여 함수를 실행하도록 하는 것을 동적 바인딩이라고 한다.


동적 바인딩의 단점

① 프로그램을 실행하는 중에 바인딩을 해야 하기 때문에 거의 무시할 수 있을 만큼이긴 하나 

    정적 바인딩을 하는 경우보다 수행 속도가 떨어진다.

② 바인딩에 필요한 메모리 번지를 저장할 포인터를 가지고 있어야 하므로, 

    정적 바인딩을 할 때는 필요없는 메모리가 함수 당 4바이트씩 더 필요하다.


반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
가상함수  (0) 2013.06.03
객체지향 언어의 특징  (0) 2013.06.03
Visual leak detector  (0) 2013.05.03
반응형

CWinApp 클래스의 구조


프로그램이 시작되면 CWinApp 클래스의 인스턴스가 생성되고,

세개의 멤버 함수가 차례로 호출되는 구조롤 만들어져있다.

   InitInstance();

   Run();

   ExitInstance();


Run 함수는 무한루프를 돌면서 메시지를 처리하는 기능을 하고, 프로그램을 종료하라는 메시지인 WM_QUIT 메시지를 만나면 무한루프에서 빠져 나온다.

프로그램이 실행되면 

① InitInstance 함수가 잠깐 실행되고, 

② Run 함수에서 계속 머무르고 있다가, 프로그램이 끝나기 직전에 

③ ExitInstance 함수가 잠깐 실행되고 프로그램이 종료되는 구조로 되어 있다.

반응형
반응형

가상함수란??

함수를 선언할때, 앞에 virtual 이라는 키워드를 붙여부면, 그 함수는 동적바인딩을 사용한다.

즉, virtual 이라는 말에서 "가상"은, 이 함수를 호출했을 때, 

함수를 실행하기 위해 실제함수가 있는 번지로 점프를 하게 되는데, 

실행 파일에는 점프할 번지가 존재 하지 않는다는 뜻에서 붙여진 말이다.

가상 함수 외의 일반적인 함수는 모두 정적 바인딩을 사용한다.

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
객체지향 언어의 특징  (0) 2013.06.03
Visual leak detector  (0) 2013.05.03
반응형

C++ 은 객체지향 언어(Object-Oriented Language)이고, C 언어는 절차적 언어(Procedural Language)이다.

객체지향 언어의 특징은 3가지가 이다. 각각의 특징은 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism) 이다.

1. 캡슐화(Encapsulation): 데이터와 데이터의 행동 양식을 결정하는 코드를 한 번에 묶는 구조로 내부의 정보를 외부에 노출하지 않음.

2. 상속(Inheritance) : 특징, 장점을 분리해 놓은 클래스를 분리하여 사용

3. 다형성(Polymorphism) : 객체들의 타입이 다르면 같은 메시지가 전달되어도 서로 다른 동작을 하는 것.

객체지향에서 하나의 코드로 다양한 타입의 개체를 처리하는 기술.

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
Visual leak detector  (0) 2013.05.03
반응형

커서이동 

 h 커서를 왼쪽으로 이동

j 커서를 아래로 이동

k 커서를 위로 이동

l 커서를 오른쪽으로 이동

 W,w 다음 단어의 처음으로 이동

E,e 단어의 끝으로 이동

B,b 단어의 처음으로 이동

※소문자 -> 스페이스바 기준으로 jump

  대문자 -> 단어 + 특수문자 기준으로 jump

 

0(숫자) 행의 처음으로 이동

$ 행의 마지막으로 이동


G 문서의 마지막로 이동

gg 문서의 처음으로 이동(전체화면에서)

H 문서의 처음으로 이동(현화면에서)

M 문서의 중간으로 이동

L 문서의 마지막으로 이동

 

 

명령모드

i 현재 위치에서 입력 모드로 변경

a 현재 위치에서 우측으로 한칸 이동 후 입력 모드로 변경

I 행의 제일 처음에서 입력 모드로 변경

A 행의 제일 마지막에서 입력모드로 변경

o,O 커서 아래에 새로운 행을 추가하고 입력모드로 변경

s 현재 문자를 지우고 입력모드로 변경

S 현재 행의 모든 문자를 지우고 입력모드로 변경


x 커서가 있는 문자 삭제

X 커서가 입는 앞 문자 삭자

dd 현재 커서의 행 삭제

숫자+dd 현재 커서부터 숫자만큼 행 삭제

yy 현재 커서가 있는 라인을 복사

숫자+yy 현재 커서부터 숫자만큼의 행을 복사

p 복사한 ㄴ용을 현재 라인 이후에 붙여넣기

P 복사한 내용을 현재 라인 이전에 붙여넣기


파일관련

 

:e 파일열기(전내용은 증발함)

:enew 현재 창을 닫고 빈문서를 연다.

:q 종료(변경된 내용이 없는 경우)

:q! 강제 종료(변경된 내용이 있어도 무시)

:w 파일 저장

:wq 파일 저장 후 종료

 


반응형
반응형

출처: http://www.codeproject.com/Articles/9815/Visual-Leak-Detector-Enhanced-Memory-Leak-Detectio


빌드시 나타나는 메모리릭을 찾을수 있는 방법입니다.

우선 아래에 버전에 맞게 파일을 다운로드 합니다.


- 비주얼 스튜디오 6.0

Vld_VS6.0.zip

- 비주얼 스튜디오 2005

Vld_VS2005.zip


사용방법: 비주얼 스튜디오 6.0기준

1. Tool -> Options... -> Directories -> Include files 경로 추가

2. Tool -> Options... -> Directories -> Library files 경로 추가

3. Tool -> Options... -> Directories -> Source files 경로 추가

4. main 함수 위에 #include "vld.h" 라인 추가

5. 프로젝트 폴더 안에 vld.dll, dbghelp.dll 붙여넣기

6. Debug 모드로 빌드

위에 순서대로 빌드시 메모리릭이 발생한 부분을 찾을 수 있습니다.



반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
객체지향 언어의 특징  (0) 2013.06.03

+ Recent posts