전체 글
-
240113 [IOCP] thread 작동 방식 이해하기기록 2024. 1. 13. 16:09
짚고 가야 할 3가지 함수 1. CreateIoCompletionPort I/O(입출력) 완료 포트를 만들고 지정된 파일 핸들에 연결한다. 파일 핸들과 관련된 비동기 I/O 작업 완료 알림을 받을 수 있다. 2. GetQueuedCompletionStatus I/O(task)가 완료된 패킷을 큐에서 빼는 상태다. 3. PostQueuedCompletionStatus I/O(task)완료 패킷에 할 일을 담아 큐에 다시 넣는 작업이다 처음 사용할 쓰레드를 포스트해주면 -(없는)일을 마치고 대기상태가 된다. 전체 실행 흐름으로 작성하였다. thread_local int Value = 0; int ResultValue = 0; std::atomic_int ThreadIndex = 0; std::mutex Lo..
-
C++ 이름 규칙(Naming Rule) 정리기초뿌셔 2024. 1. 12. 21:29
https://hayo-su.tistory.com/93 240112 C++ 백준 런타임에러(NZEC) 문제 발생) visual studio 2022에서 정상적으로 작동하며, 아무리 생각을 다시해봐도 코드 로직 자체에 문제가 없다고 생각되었다. 해결 과정) 1. 다른 블로그의 체크리스트를 확인해보았다. (나는 해 hayo-su.tistory.com 바보같은 이슈 이후 이름 규칙정리를 시작한다. 명명된 개체 유형, 변수, 함수, 상수, 매크로 등 어떤 종류인지 즉시 알 수 있도록 이름을 짓는 것(가독성)이 중요하다. 팀 프로젝트를 진행한다면 팀원과 Nameing Rule을 공유하여 팀 Nameing Rule을 만들고 프로젝트를 진행할 것이다. 표기법 파스칼 표기법 모든 단어에서 첫 글자를 대문자로 쓰는 방식..
-
240112 C++ 백준 런타임에러(NZEC)기록 2024. 1. 12. 17:00
문제 발생) visual studio 2022에서 정상적으로 작동하며, 아무리 생각을 다시해봐도 코드 로직 자체에 문제가 없다고 생각되었다. 해결 과정) 1. 다른 블로그의 체크리스트를 확인해보았다. (나는 해당사항이 없었다.) https://jaimemin.tistory.com/1522 알고리즘을 풀 때 런타임 에러가 발생하는 이유 알고리즘을 풀다 보면 런타임 에러가 종종 발생합니다. 테스트 케이스에서 런타임 에러가 발생할 경우 어디서 발생하는지 로그를 찍어보며 확인할 수 있지만 시스템 케이스에서 발생한다면 어 jaimemin.tistory.com 2. 변수명을 변경해보았다. --문제 해결???? 원인 파악) 참 어이없게도 max라는 변수가 문제가 되었다. 본인은 1. 헤더를 사용하지 않았다. 2. n..
-
240111 로컬 호스트 서버 구축 2카테고리 없음 2024. 1. 11. 19:40
결과 클라이언트에서 보낸 메세지가 서버로 전달된다 서버와 클라이언트 선택 imgui를 사용하여 서버와 클라이언트를 선택하여 들어갈 수 있도록 하였다. Server void NetObejctServer::Start() { m_IsServer = true; SOCKADDR_IN Add; if (false == CreateSocket(Add)) // Socket { return; } if (false == BindPort(Add))// Bind { return; } if (false == Listen()) // Listen { return; } Accept(); // accept } Client void NetObjectClient::Start() { SOCKADDR_IN Add; if (false == Cr..
-
240109 클래스 소멸자 가상화기록 2024. 1. 9. 23:54
상속할 부모클래스의 소멸자는 가상화 해야한다!! 문제점) 프로젝트를 진행할 때 메모리관리를 가능한 선 내에 철저하게 하고싶어 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 이 매크로 함수를 통해 leak(release)하지 않은 메모리를 확인한다. leak이 발생하는 것을 확인하였다. 문제 원인) 서버오브젝트와 클라이언트 오브젝트 클래스는 NetObject를 상속받게 만들었고 NetObject 상태로 Release하였기 때문에 소멸자가 부모 클래스만 작동하였던것이다. 해결) NetObject의 소멸자를 가상화시켜준다!
-
240107 로컬 호스트 서버 연결해보기기록 2024. 1. 7. 20:31
서버에 대한 이해도가 필요하다고 느껴졌고, 이전에 만든 imgui 화면을 이용해 채팅 서버를 만들어보려고 한다. 서버 소켓 생성 socket() 포트 번호 바인딩 bind() 수신 대기 listen() 연결 수락 accept() 데이터 송수신 read()& write() 연결 종료 close() 클라이언트 소켓 생성 socket() 연결 요청 connect() - 포트번호 지정, IP 주소를 텍스트에서 바이너리 형식으로 변환 데이터 송수신 read() & write() 연결 종료 close() 위와 같은 순서로 개발할 예정이다. 1. GUI 사용자가 서버가 되어야하기 때문에 서버와 클라이언트 어떤것으로 접속할 지 선택한다. if(false == SelectAccess) { if (ImGui::Button..
-
240107 windows.h와 winsock2.h 재선언으로 인한 문제기록 2024. 1. 7. 15:16
문제 내용 windows.h와 winsock2.h를 선언하였을 떄 재선언으로 인한 오류가 발생하였다. 진행과정 검색 결과 https://learn.microsoft.com/ko-kr/windows/win32/winsock/initializing-winsock Winsock 초기화 - Win32 apps Winsock 함수를 호출하는 모든 프로세스(애플리케이션 또는 DLL)는 다른 Winsock 함수를 호출하기 전에 Windows 소켓 DLL 사용을 초기화해야 합니다. 이렇게 하면 Winsock이 시스템에서 지원됩니다. learn.microsoft.com windsock을 먼저 사용하는 방법이 가장 간단한 방법이였다. 그래서 미루고 미뤄왔던 Precompiled Header를 만들었다. 과정 속성페이지에 ..
-
240104 BSP Algorithm을 이용한 Random Map Generator기록 2024. 1. 4. 14:57
BSP 알고리즘 아이디어 1. 전체공간을 가지고있는 RootNode를 가지고 시작한다. 2. 가로 세로 중 긴 축을 기준으로 랜덤 비율을 사용하여 자른다. 3. 왼쪽 영역을 LeftChildNode, 오른쪽 영역을 RightChildNode라고 정의한다. 4. LeftChildNode의 가로, 세로 중 긴 축을 기준으로 랜덤비율을 사용하여 자른다 5. 위쪽 영역을 LeftChildNode, 아래쪽 영역을 Right ChildNode라고 정의한다. 조건 1. 가로 세로의 크기는 정해진다. 2. 공간이 아닌 부분은 모두 1로 막혀있어야 한다(전체 테두리와 -1로 제공된 부분의 테두리) 3. 모든 공간은 문으로 연결되어있다. 4. 공간(Room)의 개수가 주어진다 5. 공간(Room)의 최소 크기가 주어진다 ..