inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

align 이 메모리 주소에 영향을 주나요?

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

16바이트 정렬이면 주소값이 16의 배수여야 한다. 그래서 하위 4비트가 모두 0이다. 이렇게 이해하면 될까요? 그러면 4바이트 int는 주소가 4의 배수니까 마지막 2비트가 00 이런식으로 되는건가요?

  • 네트워크
  • MMORPG
  • windows-server
유대감 댓글 1 좋아요 1 조회수 666

TryPop 에서 exchange(nullptr) 을 쓰면 버그가 나는 이유가 궁금합니다.

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

안녕하세요! 강의 너무너무 잘 듣고 있습니다!! LockFreeQueue 완성 후, 1Push 2Pop 테스트는 잘 동작했으나, 2Push 2Pop 테스트부터 크래시가 났습니다. 강의를 계속 돌려봐도 코드는 다른 것이 없었는데, 수업 자료에 첨부해주신 코드를 보니까 주석으로 exchange 를 사용하면 버그가 있다고 알려주셔서 일단 해결 방법을 확인 했습니다. 그런데 문제를 만든 상황이 무엇인지 감이 안오네요. exchange 로 하면 문제가 발생하는 이유가 무엇인지 알 수 있을까요? 원인과 문제가 되는 상황 궁금합니다! 그리고 이러한 상황에서 어떻게 디버깅을 해야하는지에 대한 조언도 부탁드리고 싶습니다. 답변 해주시면 정말 감사하겠습니다!

  • 네트워크
  • MMORPG
  • windows-server
빠광 댓글 1 좋아요 0 조회수 397

Reference Counting의 멀티 쓰레드 환경에 대해서 질문이 있습니다.

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Reference Counting의 코드가 멀티 쓰레드 환경에서 잘 작동한다고 말씀해주셨습니다. 제가 코드를 공부하고 있는데, RefCounting.h의 inline void Set(T* ptr) { _ptr = ptr; if (ptr) ptr->AddRef(); } 이 부분에서 if(ptr)은 통과를 했는데, ptr->AddRef()를 하기 직전에, 해당 ptr이 Release 되어서 nullptr이 되버린다면, nullptr의 AddRef()를 호출함으로 오류가 뜰 수 있다고 생각이 되었습니다. 이렇게 된다면 멀티 쓰레드 환경에서 잘 작동하지 않는다고 생각이 들었는데, 제가 수업을 들으면서 무언가 놓친 것이 있는 걸까요?

  • 네트워크
  • MMORPG
  • windows-server
가랑눈 댓글 1 좋아요 0 조회수 485

Client에서 WSAEventSelect 사용하고싶어서 작성했는데 문제가생겼어요

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Client에서 WSAEventSelect 사용하고싶어서 작성했는데 FD_WRITE Event가 한번발생 후 그뒤로 발생을 하지 않습니다 주의사항대로라면 FD_WRITE발생시 send를 호출하지 않으면 두 번 다시 발생하지 않는다고 했는데 그건 아닌거같아 혹시 어디서 문제가 발생한건지 봐주실수있나요?? // Send while (true) { //연결된 Event중 동작 가능한 Event 탐색 //WSAWaitForMultipleEvents(저장된 이벤트수,이벤트배열 시작주소,이벤트 성공을 모두 기다릴지 여부,타임아웃,FALSE) int index = WSAWaitForMultipleEvents(vecWSAEvents.size(), &vecWSAEvents.front(), false, WSA_INFINITE, false); //작업오류상태 if (index == WSA_WAIT_FAILED) continue; //return 된 index에 WSA_WAIT_EVENT_0를 빼주면 실제 실행된 Event의 Index를 구할 수 있다. index -= WSA_WAIT_EVENT_0; //어떤 종류의 Event가 발생했는지 확인 WSANETWORKEVENTS NetworkEvents; Result = WSAEnumNetworkEvents(ClientSessions.m_Socket, vecWSAEvents[index], &NetworkEvents); if (Result == SOCKET_ERROR) continue; //Read Event 발생 if (NetworkEvents.lNetworkEvents & FD_WRITE) { //Error 체크 if (NetworkEvents.iErrorCode[FD_WRITE_BIT] != 0) continue; Result = send(ClientSessions.m_Socket, ClientSessions.m_strBuff, sizeof(ClientSessions.m_strBuff), 0); if (Result == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) continue; std::cout << "Send Data ! Len = " << sizeof(ClientSessions.m_strBuff) << std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); } }

  • 네트워크
  • MMORPG
  • windows-server
호잇 댓글 1 좋아요 0 조회수 669

pyinstaller UnicodeDecodeError 가 발생합니다.

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

안녕하세요. 강의 잘 듣고 있습니다. 다름이 아니라, pyinstaller 대부 modulegraph.py 에서 오류가 있어서 이것저것 인코딩을 바꿔줘도 문제가 사라지지 않습니다. pyinstaller가 문제가 없다고 한다면 제 쪽 환경에서 문제가 있는건데 아무리 서치를 해도 compat.py ? 쪽에 문제가 있는 분들은 많으신데 modulegraph에 문제가 있다는 분은 안보이네요.. 명쾌한 해결책을 가지신 분들 꼭 해답을 알려주세요..

  • 네트워크
  • MMORPG
  • windows-server
모카콜라 댓글 3 좋아요 0 조회수 1366

콘솔창에 값이 뜨는데 까지 오래걸리는데...

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

안녕하세요 선생님 다름이 아니라 콘솔창에 값이 나온는데 너무 오래 걸려서 질문남깁니다.. 구글링을 며칠간 해보면서 보안프로그램 충돌 의심 => 보안프로그램 삭제 비주얼 스튜디오 재설치 를 해봤는데도 해결이 안되고 정보가 없어서 여기에 질문을 남깁니다.. 이 상태로 30초 정도 기다려야지 값이 나오더라구요 실습 동안에 계속 이 현상이 나타납니다. 저 화면은 그냥 std::cout만 했는데 30초 이상 기다려야되네요... 혹시 이런 상황을 겪어보신적이 있나요?? 감사합니다

  • 네트워크
  • MMORPG
  • windows-server
장재범 댓글 1 좋아요 0 조회수 565

Client에서 Send한 정보는 그럼

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Client에서 Send한 정보는 그럼 Server에서 Recv 하지 않으면 Client 컴퓨터의 SendBuffer에서 대기하는건가요? 아니면 Server컴퓨터의 RecvBuffer에서 대기하는건가요??

  • 네트워크
  • MMORPG
  • windows-server
호잇 댓글 1 좋아요 0 조회수 497

SetReuseAddress 보안문제

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

MSDN을 살펴보니까 ReuseAddress 옵션 설정 시 보안 문제가 발생 할 수 있다고 써있는데 실무에서도 이방법이 사용 되나요?

  • 네트워크
  • MMORPG
  • windows-server
dsadas 댓글 1 좋아요 0 조회수 461

PROTOBUF 적용하고 빌드도 성공은 했는데 헤더 파일에서 에러가 발생합니다.

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

PROTOBUF_NAMESPACE_OPEN 인식이 안되고 다른 에러들도 있는데 원인이 뭔지 몰라서 어떻게 해결해야 할 지 잘 모르겠습니다. 빌드는 잘 되는데 .proto에 정의한 message 객체를 생성하고 값을 set 하려고 하는데 자꾸 에러가 생깁니다. syntax = "proto3"; package example; message Person { string name = 1; int32 age = 2; repeated string hobbies = 3; } example::Person person; //사용자로부터 문자열을 입력 받는다. std::string name, hobby1, hobby2; std::cout << "이름: "; getline(std::cin, name); name.erase(name.find_last_not_of("\r\n") + 1); std::cout << "취미1: "; getline(std::cin, hobby1); hobby1.erase(hobby1.find_last_not_of("\r\n") + 1); std::cout << "취미2: "; getline(std::cin, hobby2); hobby2.erase(hobby2.find_last_not_of("\r\n") + 1); std::cout << "나이: "; int age; std::cin >> age; std::cin.ignore(); // 입력 버퍼 비우기 person.set_name(name); // 여기서 에러 person.set_age(age); person.add_hobbies(hobby1); person.add_hobbies(hobby2);

  • 네트워크
  • MMORPG
  • windows-server
푸딩 댓글 1 좋아요 0 조회수 1332

스마트포인터를 활용한 설계에 대한 질문

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

안녕하세요 루키스님 프로젝트에 스마트포인터를 사용해보려고하는데 제가 생각한 설계가 맞는지 궁금합니다 C++ 서버 강의에서 스마트포인터에 대한 설명을 들었는데 Shared_ptr은 상호참조문제가 있고 이를 해결하기 위해 Weak_ptr을 사용한다고 설명해주셨는데 Weak_ptr이나 Shared_ptr을 잘 사용해서 상호참조로 인한 문제를 잘 해결하면 좋겠지만 프로젝트 크기가 커지다보면 상호참조 관계를 명확하게 파악하기 어렵다는 단점이 존재할수 있다고 생각합니다 그래서 제가 생각한 방법은 어떤 객체에서 다른 객체의 생명주기를 자신이 직접 관장한다면 shared_ptr 그렇지않다면 weak_ptr로 멤버를 두고 관리하고 shared_ptr인 멤버는 항상 weak_ptr로 반환하도록 하는게 좋지 않나라는 생각입니다 강의에서 설명해주신 Knight를 예로들어보면 Knight끼리 서로를 타겟으로 지정할수 있다고 할때 Class Knight private : weak_ptr<Knight*> target shared_ptr<Weaphon*> weaphon 위 코드를 예로들면 타겟 가능한 기사객체는 자기 자신이 생명주기를 관장하는 멤버가 아니기떄문에 weak로 두고 기사가 들고있는 무기의 경우는 기사가 죽을때 같이 사라지는게 자연스럽다고 볼수 있기 때문에 shared로 둬서 knight가 죽을떄 자연스럽게 같이 사라지도록 설계하고 만약 대장간 같은데서 강화를 위해서 weaphon을 참조해야한다면 Knight에서 weak_ptr<Weaphon*> GetWeaphon() 이런식으로 설계해서 상호참조를 예방할수 있도록 설계하는것이 어떻겠냐는 생각을 개인적으로 해봤는데 이에대해서 어떻게 생각하시는지 궁금합니다

  • 네트워크
  • MMORPG
  • windows-server
Heca 댓글 2 좋아요 0 조회수 816

Spinlock에서 Compare exchange를 사용하지 않고

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

locked 값을 true, false로 바꿔주는 부분과 if문에서 lock을 검사하는 부분 만약 그 두부분을 원자적으로 실행시킬수 있다면 똑같이 스핀락으로 동작하도록 만들수 있을까요?

  • 네트워크
  • MMORPG
  • windows-server
Heca 댓글 1 좋아요 0 조회수 589

안녕하세요 Echo서버 테스트 하고 있는데

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

주고받는 도중에 Send에서 애러가 뜹니다. 어디가 잘못된걸까요??

  • 네트워크
  • MMORPG
  • windows-server
index1207 댓글 1 좋아요 0 조회수 617

OT관련 질문

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

OT 1차시를 들어봤는데 비주얼스튜디오보여주시면서 다 ~~를 다 알아볼 수 있었다. 라고 하셨는데 이 전에 듣고 와야 하는 수업이 있나요? 그전 강의를 듣고와서 이미 전반적인 코드가 있어야 하는건가요?

  • 네트워크
  • MMORPG
  • windows-server
tyler217 댓글 1 좋아요 0 조회수 496

TestLock을 Template으로 만들경우

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

TestLock을 Template class 로 선언할경우 typename을 type으로 명명한 상황에서 TestRead에서의 _queue가 Empty일경우 반환값을 지정할 방법이 있을까요??

  • 네트워크
  • MMORPG
  • windows-server
호잇 댓글 1 좋아요 0 조회수 408

TrypPop에서 oldHead를 delete 바로 할 경우의 충돌상황

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

TrypPop에서 oldHead를 delete 바로 할 경우 발생하는 충돌을 보고 싶어서 여러 번에 걸쳐서 돌려봤는데 발생하는 상황을 보지 못했습니다 이런 상황은 이론적으로 가능하나 굉장히 희박한 확률로 발생하는 걸까요??

  • 네트워크
  • MMORPG
  • windows-server
호잇 댓글 1 좋아요 0 조회수 533

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5 는 언제 나오나요?

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

안녕하세요! 루키스님 [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5는 언제쯤 출시가 될지 궁금해서 이렇게 글을 남깁니다. 입문자를 위한 UE5영상이 올라오고 있는데 해당 언리얼 영상 시리즈가 완료되면 출시가 될까요?

  • 네트워크
  • MMORPG
  • windows-server
가랑눈 댓글 1 좋아요 1 조회수 532

Reader Writer Lock 질문입니다.

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

W->R 락 순서는 허용 R->W락 순서는 허용하지 않음인데요. 두 상황 모두 허용하지 않아야되지 않을까해서 문의드립니다. W->R일 경우에도 쓰고있는 있다는 것이 값이 바뀌고 있다는 것인데 Read하는 스레드들이 쓰는 찰나에 전후 다른 값을 읽어가는 것은 문제가 없을까요?? R->W를 허용하지 않은 경우처럼 읽을 때 누가 값을 바꾸면 안되니 허용하지 않는것처럼 R->W, W->R 그게 그말 처럼 느껴져서 질문드립니다.

  • 네트워크
  • MMORPG
  • windows-server
snu 댓글 1 좋아요 0 조회수 461

CSpinLock 코드 작성중 원리에 대해서 의문점이 들어 질문 드립니다.

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

void CSpinLock::lock() { bool expected = false; bool desired = true; while (_locked.compare_exchange_strong(expected, desired) == false) { expected = false; } } SpinLock의 해당 코드에서 _locked의 값이 true일때, expected의 값이 초기에는 false임으로, 해당 반복문을 통과하지 못하고 기다립니다. 그런데 expected가 locked의 값인 true로 바뀌므로 이를 반복문 내에서 expected = false; 값으로 변경해주는데, expected의 값을 false로 변경해주기 전에 true인 locked의 값이 들어오면 아직 expected의 값은 변경되기 전이므로 SpinLock을 빠져 나올 수 있지 않을까요? 코드를 실행해보니 SpinLock이 잘 실행되고 있는 것은 확인했지만, 머리속에서는 납득하지 못한 의문점이 멤돌아서 이렇게 질문 드립니다.

  • 네트워크
  • MMORPG
  • windows-server
가랑눈 댓글 1 좋아요 1 조회수 401

TryPop()함수 중 _head와 _tail이 같을 때 ReleaseRef()를 해야하나요?

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

강의 코드를 똑같이 따라하는 도중 TryPop()함수에서 무한 루프에 빠지는 것을 확인하였습니다. 위의 이미지 중 주석처리 한 곳이 TryPop()중 무한 루프에 빠지게 하는 함수입니다. _head와 _tail이 같을 경우 ReleaseRef()에 들어갑니다. 하지만 초기 internalCount는 0이고 unsigned입니다. 때문에 저의 컴퓨터 환경기준 --를 진행할 시 '1073741823'으로 바뀌면서 무한에 가까운 루프에 빠지게 됩니다. 위의 이미지 같이 주석처리 할 경우 강의의 예시처럼 잘 진행되는 것을 확인 하였습니다. 혹시 저 부분을 주석처리 해도 되는지, 안된다면 위와 같은 상황에서 어느 부분을 수정해야 하는지 확인해 주실 수 있으실까요?

  • 네트워크
  • MMORPG
  • windows-server
qkrtkdgus78 댓글 1 좋아요 0 조회수 538

GIocpCore에서 Dispatch할 때

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

iocpObject Dispatch할때 어떻게 자동으로 리스너 Dispatch로 들어가는건가요?

  • 네트워크
  • MMORPG
  • windows-server
index1207 댓글 1 좋아요 0 조회수 485

인기 태그

인프런 TOP Writers

주간 인기글