Tuuna Computer Science

[Ncurses] sub window를 mvwin()할때의 비용 본문

C++

[Ncurses] sub window를 mvwin()할때의 비용

GuTTe 2022. 5. 21. 12:28

Ncurses 내에서 윈도우를 옮겨야 할때 mvwin()이라는 함수가 존재한다. 일반적인 window를 mvwin()하면 해당 윈도우의 _begy와 _begx에 인자로 주어진 by와 bx를 대입하고 touchwin()으로 윈도우 자체를 새로 그린다음 wrefresh()를 호출하면 된다. 하지만 subwindow의 경우 말이 많이 달라진다. 코드로 살펴보자 

Ncurses - mvwin()

위는 ncurses내의 mvwin()을 하는 코드이다. mvwin()함수 내부를 보면 해당 인자로 주어진 win이 subwin 플래그가 있는지 확인한다. 없을 시 바로 위에서 언급한대로 옮기기를 시도한다. 

하지만 _SUBWIN 플래그가 존재할 시 특별한 루틴을 타는데 바로 dupwin()함수를 통해 기존의 win을 복제한 다음 기존의 win의 내용을 지운다. 그리고 wbkgrnd()함수와 msyncup()함수를 통해 win을 부모의 내용과 똑같이 만든 다음 동기화시킨다. 그리고 mvderwin()함수를 통해서 부모창기준으로 창을 이동한 후 clone해놨던 clone window를 copy를 통해 다시 가지고온다. 

이러한 루틴때문에 발생하는 cost가 매우 크기때문에 man page나 linux die를 보면 하위창을 옮기지 말라는 것이다.

Comments