*본 글은 커니스의 연구소에서 배포할 때 기본값으로 설정되어있던 대체 명령어를 기반으로 합니다.
#영상 설명
처음은 쓰레드에 있는 대기 명령어를 활성화 했을 때의 장면입니다. 문제의 명령어가 있는 장면이 나타나기 전까지는 아무 일 없다가 쓰레드에 대기 명령어가 나타나자 그 이후 메뉴에서 문제가 발생하는 것을 볼 수 있습니다. 나타나는 현상은 다음과 같습니다.
------
1. 회상 창의 CLOSE버튼이 정상적으로 작동하지 않음. 마우스 오른쪽을 클릭해야 종료됨.
2. 세이브, 로드, 옵션 창이 켜지자마자 바로 종료됨.
3. '대사' 명령어 뒤에 고양이 모양 진행표는 출력됨.
------
다음은 쓰레드에 있는 대기 명령어를 주석처리 하여 쓰레드에 대기가 없을 때의 모습을 보여줍니다. 보시다시피, 세이브, 로드, 옵션 창이 정상적으로 나타나고 종료되는 것과 메세지로그의 close 버튼이 정상적으로 작동합니다. 다만 이때 대사 명령어 뒤에 나오는 고양이 모양 진행표는 나오지 않습니다.
#추측 1
우선 1번과 똑같은 현상을 일으키는 다른 원인은 버튼대기, 또는 대기 명령이 두 번 쓰였을 때입니다. 하지만 이 각각의 경우는 조금씩 다릅니다. 그 이유는 대기 명령어와 버튼대기 명령어의 미묘한 차이 때문입니다. 우선 아래의 예시를 보며 알아보도록 하겠습니다.
예--------------------------------------------------------
1-1. 대기 - 버튼대기
이 경우 CLOSE 버튼을 누르기 전에 다른 부분 한 번 클릭했다가 CLOSE 버튼을 누르면 정상작동하는 것을 알 수 있습니다. CLOSE 버튼을 먼저 누르면 제대로 종료되지 않고요.
1-2. 버튼대기 - 버튼대기
이 경우 CLOSE 버튼이 제대로 작동하게 하는 방법은 없습니다.
1-3. 버튼대기 - 대기
이 경우 버튼을 한 번 누르고 화면 어디든 다시 한 번 클릭하면 정상적으로 종료되는 것을 알 수 있습니다.
----------------------------------------------
아까 위에서 이 차이가 발생하는 게 대기 명령어와 버튼대기 명령어의 미묘한 차이때문이라고 했었는데요, 이 미묘한 차이란 '대기'는 어디든 클릭(혹은 버튼 입력)만 있으면 다음 명령어로 넘어가는 반면, '버튼대기' 명령어는 버튼이 눌러질 때까지 다음으로 넘어가지 않기 때문입니다.
그렇다면 1번 현상은 어디에 가까울까요?
실험을 통해 살펴본 결과 1-2번과 비슷하다는 결론을 얻었습니다. 이를 통해 추론할 수 있는 것은 다음과 같습니다.
## 1번 현상 가정
1-가 : 버튼대기가 두 번 이상 반복된다.
1-나 : 대기 명령어가 무한 반복된다.
#추측 2
반면 2 현상은 1번과는 다릅니다. 2 번 현상을 일으키는 다른 방법은 버튼대기를 없애는 것입니다.
## 2번 현상 가정
어떤 것에 의해 버튼대기 명령어가 제대로 작동하고 있지 않다.
# 쓰레드에 '대기'명령어를 넣는 생각을 한 이유.
이것은 3 번과 관련있다. 대사 명령어 뒤에 나오는 고양이 모양 진행표(위 영상참조)를 나오게 하기 위해서는 대사 명령어가 있은 후 대기 명령어가 있어야 한다.
그런데 쓰레드 안에 '대기' 명령어가 없으니 이 진행표가 나오지 않아서 대기를 한 번 더 넣을 생각을 했습니다. 이때 이렇게 해도 두 번 누르지 않아도 다음으로 넘어가지기에 별 문제 없는 것 같았습니다만, 메뉴 이용에 문제가 생기므로, 사용하지 않는 것을 권장합니다. 특히 그 장면 뿐 아니라 그 이후로 계속 메뉴 사용에 문제가 있으므로, 한 문장의 진행표를 희생하는 것이 좋다고 생각합니다.