마우스 위치 인덱스로 바꾸는 거 OK
클릭한 곳 인덱스 가져오는 걸로 했더니 다른 버튼 누를 때도 들어가져서 더블클릭으로 바꿈.
계획 : 더블클릭한 곳 + 버튼(ex:바바버튼)의 오브젝트 정보 한 줄씩 저장. → 바바게임모드에서 그 정보 읽어와서 AutoCreate함수에 하나씩 넣어서 맵으로 불러올 수 있도록.
일단 저장하는 것부터 하자.
FadeIn은 이미지 스케일로 해결
FadeOut은 쉐이더 복붙해서 이펙트로 해결
게임 승리나 종료 시에 잠깐 다른일할수있는 뭔가를 넣어야하나?
더 할 것 :
어떤 데이터를 읽거나 쓰는 것을 관리하기 위해서 iocp를 관리한다.
쓰레드를 써서 무슨 일을 한다는 것은 기본적으로 그 일이 끝날때까지 맡긴다는 것이다.
FOpen은 동기 함수. 함수가 실행되고 끝날 때까지 내가 기다리는 걸 동기라고 한다.
비동기는 언제 함수가 끝날지 모르는 거임.
iocp
서버통신이든 파일입출력이든
너한테 뭐가 왔어, 너 파일 다 읽었어 등등을 알려주는 시스템을 iocp라고 한다.
iocp는 이 용도 외에도 다양하게 이용할 수 있다. 이걸 사용하면 쓰레드를 효율적으로 이용할 수 있다. Window에서만 가능. (리눅스는 epoll이라는 걸 지원)
EngineThread
이름지정가능
RR방식 (라운드로빈 스케쥴 방식)
걍 순서대로 하나씩 넣어주는거
IOCP의 역할은 각각 입출력 데이터를 처리하는 일들이 어느쪽이 여유가 있는지 확인해주고 몰려드는 데이터의 버퍼역할도 해주고
일이 100개, 쓰레드는 5개가 있다고 해보자.
IOCP는 자신에게 등록된 쓰레드들을 waiting, release, paused 상태로 구분.
최초의 각 쓰레드 상태
Waiting Queue [waiting][waiting][waiting][waiting][waiting]
일이 1개 들어옴
Waiting Queue [waiting][waiting][waiting][waiting]
Release Queue [release[일]]
Paused Queue
일 끝나면
Waiting Queue [waiting][waiting][waiting][waiting]
Release Queue
Paused Queue [paused]
근데 일이 다시 들어오면 waiting을 안깨우고 paused를 다시 깨움. 캐시 적중률 때문!
일을 처리하려면 컴퓨터에 앉아야한다고 할 때
waiting은 아직 자리로 가지도 않은 상태(바깥에서 기다리는 사람)
release 컴퓨터 자리에 앉아있는 사람
paused 컴퓨터 자리에 앉아있는데 끝나서 일끝났다고 손든 사람
쓰레드가 일을 하기 위해서 뭔가 준비를 하는 작업을 컨텍스트 스위칭이라고 한다. 컨텍스트 스위칭이 일어나지 않는 쓰레드를 busy쓰레드라고 한다.
IOCPHandle = CreateIoCompletionPort(어쩌구); 이렇게 쓰면 iocp를 만들겠다는 뜻이 됨