분류 전체보기

Programming/C++ & Unreal

C++ 오브젝트풀 개선 with tbb

#pragma once #include #include #include template class CObjectPool{ public: CObjectPool(int size = 100){ _maxSize = size; for (int i = 0; i < _maxSize; ++i) { T* newObject = new T(); _qObjects.push(newObject); } } ~CObjectPool() { while (!_qObjects.empty()) { T* object; if( _qObjects.try_pop( object ) == true ){ delete object; } } _maxSize = 0; } // 오브젝트를 꺼낸다. T* PopObject() { T* retVal; // 꺼낼게 ..

Programming/C++ & Unreal

tbb concurrent bounded queue 차이

tbb에 있는, concurrent queue는 자주 썼었는데, concurrent bounded queue는 뭐하는 물건인고 궁금해서 찾아보았음. bounded queue (경계큐) - 용량을 지정 할 수 있는 큐 concurrent bounded queue(동시성 경계큐) - 용량을 지정하여 사용할 수 있는 멀티 쓰레딩 큐, 더이상 넣을 수 없거나 뺄 수 없으면 블락킹 된다. (try_push/pop 으로도 사용 가능) vs concurrent queue - 용량을 지정할 수 없고, 뺄 것이 없으면 실패한다. (애초에 pop 이라는 함수 자체가 없고, Try_pop 만 가능) #include #include using namespace std; int main(int argc, const char *..

Programming/C# & Unity

C# try catch finally

나는(일반적으로) 전체적으로 크게 감싸서 Exception을 잡을 때는 try-catch-finally를 쓰고, 해제와 같은 일을 할때는 try-finally를 쓴다. 1. try-catch-finally try { throw new NullReferenceException(); } catch ( Exception e ) { Console.WriteLine( $"It's Main's catch. :: {e.Message}" ); } finally { Console.WriteLine( "It's Main's finally." ); } 이건 제일 기본형. 패킷 단위에서 Exception을 막을 때 유용하게 씀. 2. try-finally static public void DoException() { try ..

Programming/C++ & Unreal

직렬화 라이브러리 완성!

혼자서 게임 서버를 처음부터 만들어보려고, 직렬화 라이브러리 부터 다시 만들었다. float, int, char, string, (multi)map, list, vector, array 등을 간단하게 매크로로 직렬화 하도록 구현 완료! 졸업 작품때, RPC를 만들면서 공부했던 매크로와 Template 기능을 여기서 다시 쓸 줄이야.. 프라우드넷을 모방해서 소켓 라이브러리를 만들어보려고 하는데.... C#에서만 써봐서 C++로 만드는 과정이 너무 힘들다. 그래도 언젠가 완성할 수 있겠지................

Programming/C++ & Unreal

C++ region

C#에서 Region을 매우 애용하는 편인데, 이 기능을 사용하면 IDE에서 소스를 용도에 따라 접고 펼수 있어서 넘 편하다. C++ 작업을 하면서 Region이 고팠는데, 찾아보니까 다음과 같은 방법으로 쓸 수가 있는 듯 하다. #pragma region 리전이름 void Test(){ // ... } #pragma endregion 리전이름 VS 2017에서는 됐었는데, 다른 IDE에서는 아마도 안 될듯 싶다. 출처 : https://stackoverflow.com/questions/9000479/equivalent-of-region-for-c

Programming/C++ & Unreal

C++ 메모리 덤프

개요 졸작으로 C++ 서버를 만들면서 제일 잣같았던 부분은, Try-Catch로 모든 Exception을 캐치 할 수 없다는 것이다. 특히 밥먹듯이 발생하던 "잘못된 메모리 접근"이 골치아팠는데, 그에 대한 해결 방법 중 하나인 Unhandled Exception Dump를 따는 법을 간단하게 적어보겠다. Try-Catch가 안되는 Exception void CreateException(int* a = nullptr) { a[100] = 100; } ... try { CreateException(); // 강제로 Memory Access Exception 유발. } // Memory Access Exception은 Catch되지 않는다. catch (...) { cout

Programming/C# & Unity

C# 자주 쓰는 Collection 집계 함수

자주 쓰는 컬렉션 집계함수들을 모아서 간단하게 사용법을 정리해보았다. 아래에서 사용한 함수는 아래와 같다. 0. Foreach 1. FindAll(찾기) 2. Except(차집합) 3. ToDictionary(사전화) 4. Select(골라내기) 5. Sum/Min/Average(집계) 6. Aggregate(누산) 7. Dictinct(중복 제거) 0. Foreach 123456789101112131415161718192021222324252627282930// 번호와 이름을 갖는 구조체struct SchoolMember{ public int UID; public string strName;} // 리스트를 출력하는 함수.public static void Print( this List lst ){ ls..

Programming/C# & Unity

C# 4.0 쓸만한 기능

세미나하면서 알게된 기능 두개. 쓸만해보여서 기록함. 1. 함수 파라미터에 콜론 (선택적 인수) (https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments) 선택적 인수는 항상 끝에 나열되기 때문에, 새로운 인수를 추가하는 과정이 매우 번거롭다. 그리고 선택적 인수가 여러개 있을 때, 한개의 값만 넣으려고 하면 C++은 매우 불편했다.. static void Main( string[] args ) { List lstInteger = new List(); PrintTypeOfC( 1, null, lstInteger ); // 이렇게 중간에 선택적 인자에 값을 넣..

Day Life

신입 게임 서버 프로그래머 포트폴리오

그렇게 대단한 포트폴리오는 아니지만, 다른 게임 서버 프로그래머 지망생 분에게 도움이 될 수 있다면 좋을 것 같아서 포스팅한다. 신입 시절에 어디 찾아볼 곳이 없어서 맨땅에서 작성하였는데 너무 힘들었던 기억이 난다.

Programming/C# & Unity

C# 비동기 루프 및 실행

개요 .Net C#에서 지원해주는 *Awesome* 한 비동기 기능에 대해서 간단히 기록하려고 게시글을 작성합니다. 정확히는 Parallel 클래스에 관련된 함수들을 소개합니다. Parallel 클래스 간단하게 비동기 작업을 수행할 수 있도록 도와주는 클래스입니다. Task나 Action, Thread 같은 것들을 직접적으로 만들 필요 없이 기존에 사용하던 Loop나 함수처럼 간단히 사용할 수 있습니다!! Parallel.For (비동기 루프) 루프를 여러 스레드로 나누어 수행하도록 합니다. // iToPage까지의 게시글 내용을 하나하나 긁어오는 함수. List GetBoardContents( int iToPage_ ) { List lstResult = new List(); for ( int iPage..

장형이
'분류 전체보기' 카테고리의 글 목록 (4 Page)