프로그래밍/의문
-
논블럭 소켓으로 connect 시 EAgain만 발생하던 현상프로그래밍/의문 2018. 7. 3. 08:38
if (IsOpen()){ return false;} m_nativeSocket = nn::socket::Socket(static_cast(GetProtocolFamily()), Type::Sock_Stream, Protocol::IpProto_Tcp); const bool opened = m_nativeSocket != SocketError; if (opened){ SetSocketOptions();} return opened; 소켓을 열고, 소켓 옵션을 적용한다. 적용할 소켓 옵션은 Nonblock으로, Poll api와 함께 사용될 것이었다. 그런데 connect를 진행했을 때, 항상 EAgain 에러가 나오더라. 하지만 에러와 무관하게 연결이 맺어졌고, 때문에 WouldBlock 같은 건가 싶어서..
-
explicit specialization of 'function name' in class프로그래밍/의문 2018. 5. 1. 21:08
클래스 안에서 '함수 이름'의 명시적인 특수화를 했습니다. 윈도우 x64에선 발생하지 않았으나 닌텐도 플랫폼 설정으로 빌드 시 발생했다.템플릿 특수화 함수의 정의가 class 안에 있어서 발생하는 오류 메세지이다.예를 들면 다음과 같은 코드일 때 해당 에러가 발생할 수 있다. class Foo{ public: template Type GetValue() const { return Type{}; } template std::string GetValue() const { return std::string{}; }}; 다음 코드처럼 정의를 외부로 빼서 오류를 해결했다. class Foo{ public: template Type GetValue()..
-
정규 표현식으로 코드 바꾸기(비주얼 스튜디오)프로그래밍/의문 2018. 4. 19. 11:43
코드가 다음처럼 되어있어서 있었는데, 반환형이 bool인데 int형을 내뱉어서 warning이 굉장히 많았다.int iResult = SendPacket(packet, packet.GetPacketSize()); // SendPacket의 반환형은 boolreturn iResult; 따라서 위 코드를 아래처럼 변경하고자 했다.return SendPacket(packet, packet.GetPacketSize()); 비주얼 스튜디오에 정규표현식을 이용한 변경을 오래전에 들었던 터라, 그 글을 찾아서 따라해봤다.찾기 및 바꾸기 창을 띄우고(Ctrl + Shift + F), 정규식 사용에 체크한다. ()으로 그룹핑 된 것은 앞에서부터 $1, $2... 로 캡쳐할 수 있다. 그리고 바꾸기를 누르면... int ..
-
tcmalloc은 비주얼 스튜디오에서 디버그모드로 실행 시 크래쉬를 일으킨다.프로그래밍/의문 2018. 4. 18. 17:59
visual studio 2015에서 다중 스레드 디버그 / 디버그 모드로 실행 시 크래쉬를 일으켰다. 이는 msvc c++ 런타임에서 디버그 검사 함수를 호출하면서 발생하는 현상으로 해결 방법은 없어보인다. 이에 대해서 공식적으로 등록된 이슈는 다음 링크에서 확인할 수 있다.https://github.com/gperftools/gperftools/issues/894 하지만 릴리즈 모드에서는 사용에 문제가 없다. 실제 중요한 건 릴리즈 모드이니 딱히 상관 없지 않을까 라고 생각함.
-
DB RETURN을 명시적으로 지정하지 않아 임의로 값이 바뀐 경우프로그래밍/의문 2018. 4. 6. 12:22
ALTER PROCEDURE spGiveStageClearReward @AccountID BIGINT, @StageID INT, @RewardItemID INTAS BEGIN BEGIN TRY INSERT INTO GameLog.dbo.ClearRewardLog ( AccountUniqueID, -- NOT NULL StageID, -- NOT NULL RewardValue) -- NOT NULL VALUES (@AccountID, @StageID, @RewardItemID, GETDATE()) END TRY BEGIN CATCH -- IGNORE EXCEPTION END CATCHEND위 프로시저에 인자로 NULL이 넘어오면 INSERT 구문은 예외를 뿜지만, try~catch 구문이 걸려있으므로 예외..
-
게임에서의 아이템 강화, n번 했을 때 성공할 확률은 어떻게 될까?프로그래밍/의문 2018. 2. 26. 18:50
확률이 x%일 때 몇 번 시도해서 성공할 확률은 어떻게 구할지 궁금했다. 무언가를 테스트 할 때 성공, 실패 처럼 두 가지의 결과만 일어나는 테스트를 베르누이 시행이라고 말한다.베르누이 시행의 분포 함수는 p^x * (1-p)^(1-x) // 단, x == 0 || x== 1다만 베르누이 분포 함수 한 번의 시도에 대한 독립적인 확률이다. c++ 코드로 풀면..unsigned long long factorial(unsigned long long n){ return n
-
멀티플레이어 게임 프로그래밍 - 코드 오류 수정프로그래밍/의문 2018. 2. 20. 12:13
178p LinkingContext 코드 개량 부분 오류 // @comment: 없을 때 0을 반환하기보단, std::optinal(c++14)을 활용해 값이 있고 없음을 구분하도록 하는 게 더 좋을 거 같다. uint32_t GetNetworkID(const GameObject* inGameObject, bool inShouldCreateIfNotFound = true) { auto it = mGameObjectToNetworkIdMap.find(inGameObject); if (it != mGameObjectToNetworkIdMap.end()) { return it->second; } else if (inShouldCreateIfNotFound) { uint32_t newNetworkId = All..