Tuuna Computer Science

[Ncurses] wrefresh vs wnoutrefresh + doupdate 본문

C++

[Ncurses] wrefresh vs wnoutrefresh + doupdate

GuTTe 2022. 5. 21. 12:43

ncurses를 사용하다보면 창을 수정하고 실제 터미널로 출력하기를 원할 때 refresh(), wrefresh(WINDOW* win)을 사용하는 경우가 많다. 그렇다면 새로고침할 때 사용하는 wrefresh()함수는 내부적으로 어떻게 이루어져 있을까 

코드를 보면 wrefresh()함수는 내부적으로 wnourefresh()함수를 호출하고 doupdate()함수를 호출한다. 

wnourefresh()함수는 수정한 내용을 가상터미널로 출력하는 역할을 지닌 함수이고 doupdate()함수는 가상터미널에 있는 출력문을 실제 터미널로 비교 출력하는 역할을 지닌다. 

즉, wrefresh()함수는 wnourefresh()->doupdate()함수의 반복적 사용이라고 볼 수 있다. 

하지만 터미널 사이의 출력은 꽤나 큰 비용이 드는 작업인데 좀 더 효율적으로 사용할 수 없을 까 

그렇기에 출력하기를 원할 때 doupdate()함수를 이용하고 그전까지는 가상터미널로 보내기만 하는 wnourefresh()함수를 사용하는 것이 비용상 훨씬 이득이다. 

wnourefresh() -> wnourefresh() -> doupdate() 이런식으로 

Comments