인프런 커뮤니티 질문&답변

snu님의 프로필 이미지
snu

작성한 질문수

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

ChunkBuffer 관련 질문입니다

작성

·

138

0

1. 4096바이트로 chunk 버퍼를 잡아놓은 후 다 사용하면 삭제하고 다시 만드는 이유가 뭔가요?
그냥 writePos를 0으로 옮기는 등 초기화하여 사용하면 되지 않나요?
 
2. ThreadLocal로 지정해 놓은 변수들은 getqueuedcompletionstatus로 임의의 스레드가 깨어났을 경우에도 깨어나기 전까지 저장해놓은 상태가 계속 유지되나요?
예를 들어 스레드 1에서 sendbufferchunk에서 100바이트 사용했다면 Dispatch하여 getqueuedcompletionstatus에서 깨어났을 때
여전히 sendbufferchunk가 100바이트를 사용한 상태를 유지하나요? 스레드 내에서는 일종의 전역변수처럼 사용되는거 같습니다.

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

1. 4096바이트로 chunk 버퍼를 잡아놓은 후 다 사용하면 삭제하고 다시 만드는 이유가 뭔가요?
그냥 writePos를 0으로 옮기는 등 초기화하여 사용하면 되지 않나요?

'다 사용하는' 시점을 알기가 어렵습니다.
패킷을 만들고 해당 버퍼를 여러 Session들에게 꽂아줄텐데,
session마다 (클라 상태에 따라) 데이터를 전송하는 시점이 다르기 때문에
writePos를 0으로 초기화해서 사용하는게 안됩니다.
 
2. ThreadLocal로 지정해 놓은 변수들은 getqueuedcompletionstatus로 임의의 스레드가 깨어났을 경우에도 깨어나기 전까지 저장해놓은 상태가 계속 유지되나요?
네 맞습니다
스레드 내에서는 일종의 전역변수처럼 사용되는거 같습니다.
이것도 맞습니다



snu님의 프로필 이미지
snu

작성한 질문수

질문하기