Как избежать переписывания фрагментов текста, которые не меняются - PullRequest
0 голосов
/ 20 января 2019

Я разработал простое приложение NCurses, которое я использую для целей отладки. Он постоянно печатает и обновляет некоторые переменные и их значения в окне терминала.

Я использую функцию printw для печати имен переменных и их значений следующим образом:

while( ... )
{
    clear();

    printw("var_1: %d\n", var_1);
    printw("var_2: %d\n", var_2);
    printw("var_3: %d\n", var_3);
    ...

    refresh();
}

Это производит вывод как это:

var_1: 10
var_2: 20
var_3: 30
...

Поскольку этот фрагмент кода находится внутри цикла, я постоянно переписываю весь экран, как имена переменных, так и их значения.

Обратите внимание, что единственными данными, которые необходимо обновить, являются значения, поскольку имена переменных всегда одинаковы, поэтому нет необходимости перезаписывать их снова и снова на каждой итерации.

Как мне избежать переписывания фрагментов текста, которые не меняются в моем приложении NCurses?

1 Ответ

0 голосов
/ 20 января 2019

С NCurses ваша область экрана - просто двумерная сетка.Вы можете печатать в любой позиции экрана с помощью mvprintw()

Поэтому сначала напечатайте фиксированный текст в заданной позиции, затем в цикле напечатайте значение в соответствующей позиции значения:

mvprintw( x, y,   "var_1:" );
mvprintw( x, y+1, "var_2:" );
while( ... )
{
/// compute values
   mvprintw( x+6, y,   value1 );
   mvprintw( x+6, y+1, value2 );
}

Ссылка

...