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 *..
혼자서 게임 서버를 처음부터 만들어보려고, 직렬화 라이브러리 부터 다시 만들었다. float, int, char, string, (multi)map, list, vector, array 등을 간단하게 매크로로 직렬화 하도록 구현 완료! 졸업 작품때, RPC를 만들면서 공부했던 매크로와 Template 기능을 여기서 다시 쓸 줄이야.. 프라우드넷을 모방해서 소켓 라이브러리를 만들어보려고 하는데.... C#에서만 써봐서 C++로 만드는 과정이 너무 힘들다. 그래도 언젠가 완성할 수 있겠지................
C#에서 Region을 매우 애용하는 편인데, 이 기능을 사용하면 IDE에서 소스를 용도에 따라 접고 펼수 있어서 넘 편하다. C++ 작업을 하면서 Region이 고팠는데, 찾아보니까 다음과 같은 방법으로 쓸 수가 있는 듯 하다. #pragma region 리전이름 void Test(){ // ... } #pragma endregion 리전이름 VS 2017에서는 됐었는데, 다른 IDE에서는 아마도 안 될듯 싶다. 출처 : https://stackoverflow.com/questions/9000479/equivalent-of-region-for-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
텍스트를 파싱하는 로직이 필요해서 간단히 작성한 프로그램. 긴 설명은 필요없을 것 같아 소스만 남김! 사용법 #include #include "ConfigParser.h" int main() { CConfigParser test("test.ini"); if (test.IsSuccess()) { std::cout
언리얼 에셋은 불러오기 참 불편하다... static ConstructorHelpers::FClassFinder CS_PSYCHICFORCE(TEXT("/Game/Blueprint/CameraShake/Esper/CS_01_PsychicForce.CS_01_PsychicForce_C")); if (CS_PSYCHICFORCE.Succeeded()) { CS_PsychicForce = CS_PSYCHICFORCE.Class; } 뭔가 받으려면 이름부터 길다란 네임스페이스에 여러가지 붙여야 로드가 가능하다. 로드가 실패한것도 체크안하면 터져버린다. 클라이언트 프로그래머 친구들이 저 더럽고 불결한 내용을 몇십 몇백개 적고 있는걸 보니 눈물이 나서 다음과 같은 매크로를 만들었다. /* Object Asset을 ..
이득우 교수님의 언리얼 C++ 책을 참고해서 작성한 매크로 들인데 다른 프로젝트에서 유용히 쓸 수 있을것 같아서 여기에 공유한다. // HACKED.h (모듈최상위 헤더) // 이 함수가 호출된 함수의 이름과 라인을 매크로로 String화 시킴 - 출처 : 이득우의 언리얼 C++ 게임 개발의 정석 #define LOG_CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")")) // 위의 CALLINFO와 함께 아무 내용이 없는 로그를 찍는 매크로 - 출처 : 이득우의 언리얼 C++ 게임 개발의 정석 #define LOG_S(Verbosity) UE_LOG(HACKED_LOG, Verbosity, TEXT("%s..
UGameplayStatics::GetPlayerController(this, 0)->SetControlRotation(rideTarget->GetComponentRotation()); RideTarget의 로테이션에 플레이어 컨트롤러 화면을 바꾸는 건 이렇게 하면됨. 언리얼 인풋 컴포넌트에서 조정해서 그럼.