일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 오픽 초보
- SQLD이론
- clean code
- 주석
- git
- BFS
- sqld요약
- beautifulsoup
- 폴링vs이벤트
- N-Queen
- DP
- SQLD 이론
- 알고리즘
- c++
- 오픽
- Python
- 백준
- 서버최적화
- 역행자
- Backtracking
- 클린코드
- sqld
- 게임서버개발
- 파이썬
- 서버아키텍처
- Javascript
- SW개발자를 위한 성능좋은 SQL
- 클린 코드
- 자청
- MFC
- Today
- Total
가취공부하자

이벤트는 스레드 간 동기화를 위한 커널 오브젝트로,특히 스레드가 특정 조건이 충족될 때까지 대기해야 하는 상황에서 유용합니다. 아래 내용은 이벤트의 개념과 활용에 대한 정리입니다. (c++ 게임서버 강의를 듣고 정리하였습니.) 기본 개념이벤트: 커널에서 관리하는 동기화 객체로, Signal(초록불)/Non-Signal(빨간불) 상태를 가짐목적: 스레드 간 통신 및 동기화, 특히 무의미한 대기 상태를 방지하기 위해 사용 Event 사용 예제 코드// Producer 스레드: 데이터 생성 후 이벤트를 Signal 상태로 변경void Producer() { while(true) { { unique_lock lock(m); q.push(100); ..

c++ 애플리케이션에서 사용하는 메모리는 크게 스택과 프리스토어( free store) 로 나뉜다. 스택스택은 함수 호출과 관련된 지역 변수 및 함수를 저장하는 영역이다. 매우 빠르며, LIFO(Last In, First Out) 방식으로 작동한다.스택에 할당된 변수는 프로그래머가 직접 할당 해제할 필요없이 자동으로 처리된다. 프리스토어일반적으로 힙(Heap)이라고도 불리며, 동적 메모리 할당에 사용된다. 함수가 끝난 후에도 그 안에서 사용하던 변수를 계속 유지하고 싶다면 프리스토어에 저장한다.프리스토에 할당된 메모리 공간은 개발자가 직접 할당과 해제를 관리한다. 포인터메모리 공간을 적당히 할당하기만 하면, 어떤 값이라도 프리스토어 저장할수 있다.메모리 공간을 할당할때는 포인터를 선언한다.int* myI..

rand와 srand는 난수를 생성하는 데 사용되는 함수이다. 1. rand역할 : 의사 난수 (실제로는 예측 가능한 수열이지만, 일정한 패턴 없이 생성되는 것처럼 보이는 수열)를 반환한다.사용방법 : "#incldue "을 사용해도 된다.#include int random= rand(); 출력범위 : 0~ 32767주의점 : 프로그램이 실행될 때마다 동일한 난수 시퀀스를 생성 2. srand역할 : rand가 생성하는 난수 시퀀스를 설정하는 시드 값을 설정한다. srand를 사용하지 않으면 rand는 항상 동일한 시퀀스를 생성한다. 사용방법 #include int main(){ srand(time(0)); for (int i = 0; i
reference 타입은 새로운 메모리를 할당하는 것이 아닌 다른 개체의 별칭, 별명(alias)으로 사용되는 c++ 타입이다. #include int main() { int n = 0; int& r = n; // n과 r은 동일한 메모리를 바라보고 있음. r = 10; std::cout

[템플릿] "템플릿은 사용자가 템플릿 매개 변수에 대해 제공하는 인수를 기반으로 컴파일 시간에 일반 형식 또는 함수를 생성하는 구문입니다. " -> https://learn.microsoft.com/ko-kr/cpp/cpp/templates-cpp?view=msvc-170 int add(int a, int b) { return a+b; } double add(double a, double b) { return a+b; } int main() { add(1,2); add(1.2, 3.4); return 0; } 위 코드에서 add를 호출할 때에는 하나의 함수처럼 보이지만 int 형, double형 add 함수를 각각 생성하였다. 이러한 경우에 템플릿을 사용하면 편리하다. 템플릿을 사용하면 각 타입에 대한 ..

[인라인 함수란] 인라인 함수는 호출 시 호출 코드에 함수의 모든 코드를 치환(삽입)하는 방식의 함수이다. 이 방식은 일반 함수와 달리 호출하는 과정이 없기 때문에 실행 속도가 빠르다. 그러나 인라인 함수가 코드가 길어진다면 호출할 때 마다 메모리가 사용되기에 메모리 낭비가 발생할 수 있다, 그래서 인라인 함수는 되도록 짧은 함수를 사용하는 것을 추천 [일반 함수] 1. 일반 함수는 호출 시 스택에 함수로 전달할 매개변수와 돌아올 주소를 저장 2. 프로그램의 제어가 함수의 위치로 넘어와 함수내 모든 코드 실행 3. 실행이 끝나면 반환값을 넘겨줌. 그 후 프로그램의 제어는 스택에 저장된 돌아갈 반환 주소 값으로 이동해 스택에 저장된 함수 호출 정보 제거 이와 같은 과정이 함수 호출시 마다 일어난다. [예제..

[기본개념] c++에는 다양한 내부 식별자(identifier)가 존재합니다. (변수, 함수, 구조체, 클래스 등..) 프로젝트가 커지거나 프로그램이 복잡해지면 내부 식별자간 충돌할 가능성이 높아집니다. 이러한 충돌문제를 c++ 에선 namespace로 해결하고 있습니다. namespace Book { void print(); int price; } namespace Movie { void pirnt(); int price; } [namespace 접근방법] 1. 완전 한정 이름 (Fully Qualified Name) Book::print(); 2. 선언 사용 (declaration) using Book::price; price = 4; 3. 지시어 사용 (Directive) using namespac..

잘 안보이지만... 화면을 4등분해서 각 "줄"에 문장을 출력해보기 예제 1. 윈도우 어플리케이션 크기를 알아야 한다. 크기를 알기 위해선 WM_SIZE에 호출되는 OnSize함수를 통해 알수있다. (OnSize함수는 클래스 마법사 통해서 생성) OnDraw와 어플리케이션 크기 값을 공유하기 위해 public 변수를 사용.(w_size) - public 변수 선언 : MFCTEST1View.h 에 public : CSize w_size 선언. void CMFCTEST1View::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); //여기서 CX,CY는 윈도우 어플리케이션 높이, 넓이 값 w_size.cx = cx; w_size.cy = ..

잘 안보이지만... 화면을 4등분해서 각 "줄"에 문장을 출력해보기 예제 1. 윈도우 어플리케이션 크기를 알아야 한다. 크기를 알기 위해선 WM_SIZE에 호출되는 OnSize함수를 통해 알수있다. (OnSize함수는 클래스 마법사 통해서 생성) OnDraw와 어플리케이션 크기 값을 공유하기 위해 public 변수를 사용.(w_size) - public 변수 선언 : MFCTEST1View.h 에 public : CSize w_size 선언. void CMFCTEST1View::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); //여기서 CX,CY는 윈도우 어플리케이션 높이, 넓이 값 w_size.cx = cx; w_size.cy = ..

MFC 프로그래밍은 메시지 처리 방식으로 프로그래밍된다. 따라서 사용자가 이벤트를 일으키면 해당 메시지 핸들러 함수가 실행된다. 메시지는 발송되는 형태에 따라 크게 3가지로 나뉜다. 윈도우 메시지 윈도우 어플리케이션 영역에서 발생하는 메시지 (예시, WM_SIZE, WM_KEYDOWN, WM_RBUTTONDOWN) 커멘트 메시지 어플리케이션의 "메뉴"를 선택했을 때 발생하는 메시지 컨트롤 통보 메시지 에디트, 리스트 박스, 콤보 박스를 컨트롤 이라고 부른다. 컨트롤에서 이벤트가 발생하면 전송되는 메시지.