All250 DirectDraw 학습 (1) - Initialization 학습 목적의 글입니다. 자료: www.youtube.com/watch?v=J0MNKUYw1zY 영천님께서 Direct3D 학습 전에 DirectDraw 좀 익히고 시작하면 도움이 된다고 하니.. 특히 비트맵과 관련하여 세부적인 내용들을 경험해 볼 수 있다고 하시니 믿고 공부! 학습 전에 컴퓨터 그래픽스에 대해 공부를 하고 오면 더욱 이해가 잘 될 것이다. 우선 다음은 DirectDraw 객체를 사용하기 위해 필요한 기본적인 변수들이다. 초기화 과정에서 아래 변수들을 초기화할 것이다. LPDIRECTDRAW pDD; LPDIRECTDRAW7 pDD7; LPDIRECTDRAWSURFACE7 pDDPrimary; LPDIRECTDRAWSURFACE7 pDDBack; LPDIRECTDRAWCLIPPER pCli.. 2020. 11. 15. [Gomoku] 중개 서버를 통해 NAT 뒤의 두 클라이언트를 연결시키려면 | 홀펀칭(hole punching) 게임을 거의 완성했는데.. 네트워크 연결이 문제다. 방을 생성한 사람이 host가 되고 방에 입장하는 사람이 peer(client)가 되도록 했다. 그리고 TCP 프로토콜을 사용한다. 개발할 땐 단순히 피어가 연결하려는 상대의 IP주소와 포트를 localhost 주소와 정해놓은 포트 번호를 사용했다. 그런데 서로 다른 네트워크를 가진 호스트를 연결시키려면 중개 서버가 필요하다. 왜? 방에 입장하려는 사람이 방을 생성한 사람의 IP 주소와 포트를 모르니까. 그래서 중개 서버를 띄우고, 호스트들이 게임을 실행하면 가장 먼저 중개 서버에게 패킷을 전달하여 자신들의 IP 주소와 포트 정보를 주고, 방에 입장하는 사람은 중개 서버가 가진 IP 주소를 이용하여 입장하도록 하면 된다. 근데 또 이게 말처럼 간단하지가.. 2020. 11. 12. 스레드 함수의 인자로 shared_ptr을 전달할 때 주의할 점 | _Incref 에러 주의할 점이라기 보단 나처럼 바보같은 실수로 시간 낭비하는 일이 없었으면 해서.. 기존에 잘 사용하던 함수가 있었는데, 이 함수를 메인 스레드가 아니라 new 스레드를 만들어서 new 스레드가 수행하도록 했다. 근데 뭔가 오류가 발생했다. 디버거로 한 단계씩 보았는데도 문제점을 찾기 어려웠다. 좀 더 자세히 확인해 보니 함수 내에서 인자를 사용하는 부분에서 런타임 에러가 발생했다. 바로 이 부분 혹시나 인자가 잘못 전달됐는지, 잘못 캐스팅됐는지 메모리를 확인해 보아도 당연히 똑같았다. 스레드를 사용하기 전이랑. 원래 디버깅 중에 런타임 에러가 발생하면 라이브러리 함수 내에서 에러가 발생한 부분을 보여준다. 근데 보통 봐도 도움이 안됐던 적이 많아서 이번에도 그냥 넘겼었다. 하지만 달리 방법이 없어 보고 .. 2020. 11. 8. [OS] 운영체제 연습 문제 풀이 (2) 책 이름: 개념 이해를 위한 운영체제 (21세기사) [프로세스의 정의를 "실행 중인 프로그램" 으로 함이 왜 충분하지 못한가? 그 부족함을 보완할 수 있는 더 좋은 정의를 제시하라] 오직 하나의 프로세스만을 실행하는 시스템 환경에선 해당 정의로 충분하다. 하지만 대부분의 시스템은 여러 프로세스를 번갈아 가며 실행하는 다중 프로그래밍 환경이다. 이를 위해선 실행할 프로그램이 프로세스 형태로 메모리에 존재해야 한다. 즉 메모리에 여러 개의 프로세스가 존재할 수 있다. 하지만 한 시점에서 실행되는 프로세스는 하나이다. 따라서 실행 중인 프로그램이란 의미는 부족할 수 있다. 프로세스란 "프로그램이 메모리 상에 실행 가능한 형태로 적재되어 있는 것" 이라고 정의하는 것이 더욱 디테일하다. [프로세스와 프로그램과의.. 2020. 11. 7. [Gomoku] 스레드 설계 게임이 시작되면 각 플레이어는 번갈아 가며 게임을 진행한다. 각 플레이어는 각 턴마다 60초의 시간을 가진다. 시간이 초과되면 자동으로 패배 처리가 된다. 타이머는 1초마다 WM_TIMER 메세지 혹은 콜백 함수를 호출하며 루틴을 실행한다. 여기서 내가 필요한 것은 1초마다 시간을 감소시키고, 그 시간을 출력해서 남은 시간을 보여주는 것이다. 만약 내 턴일 경우 오목알을 놓는 순간을 제외하면 타이머가 정상적으로 동작할 것이다. 우선은 스레드 한개만 사용해도 될 것 같다. 그런데 상대방 턴일 경우 나는 recv를 호출하여 블로킹 상태에 있을 것이다. 하지만 여전히 상대방의 타이머를 1초마다 갱신해서 출력해 주어야 한다. 따라서 recv를 호출하는 스레드와 타이머를 갱신시킬 스레드가 필요하다. 멀티 스레딩을.. 2020. 11. 4. [Gomoku] 소켓 관련 함수 궁금점들 // 소켓 관련 함수에 관해 궁금한 것들 1. A 소켓을 통해 recv 함수를 호출한 상태에서, 다른 스레드에서 A 소켓을 통해 send를 할 경우 문제가 없는가? -> 아래 실험을 통해 우선은 문제는 없어보인다. 2. A 소켓을 통해 recv를 호출해서 호출 스레드가 블로킹 상태에 들어갔다. 다른 스레드에서 A 소켓을 논블로킹 모드로 변경했다. 그러면 블로킹 상태의 스레드가 블로킹 상태를 벗어나나? 아니면 계속해서 블로킹 모드를 유지하나? 유지한다면 기존 recv 동작에는 영향이 없나? -> 실험해 봤는데 블로킹 상태를 유지하며, 패킷도 정상적으로 수신한다. 내부적으로 문제가 생기는지는 모르겠다. 2020. 11. 3. 이전 1 ··· 13 14 15 16 17 18 19 ··· 42 다음