[Решение найдено] Ncurses фликает. Что делать?

Модератор: Модераторы разделов

yoshakar
Сообщения: 259
ОС: Debian Stretch

[Решение найдено] Ncurses фликает. Что делать?

Сообщение yoshakar »

Имеем простейшую программу, использующую ncurses:

Код: Выделить всё

#include <ncurses.h>
#include <unistd.h>

int main() {
  initscr();
  start_color();
  noecho();
  init_pair(1, COLOR_BLACK, COLOR_GREEN);
  while(1) {
    bkgd(COLOR_PAIR(1));
    clear();
    int w, h;
    getmaxyx(stdscr, h, w);
    int i, j;
    for(i = 3; i < w - 3; ++i)
    for(j = 3; j < h - 3; ++j)
      mvprintw(j, i, "%s", "a");
    refresh();
    getch();
  }
  endwin();
  return 0;
}

При запуске (в иксовой консоли) если зажать и не отпускать любую клавишу на клавиатуре, по экрану (по терминальному окну) периодически промелькивает "дрожь", некая чернота.

Что с этим делать?

P. S. Уточнение: промелькивающая чернота распространяется на нижнюю половину экрана. И она всё-таки скорее апериодическая.
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [Решение найдено] Ncurses фликает. Что делать?

Сообщение yoshakar »

Появилась гипотеза, что проблему можно устранить воспользовавшись slang вместо ncurses. Буду пробовать. Но независимо от результата всё-таки хотелось бы и в рамках ncurses найти решение.

UPDATE. Гипотеза в смысле обязательности такого перехода опровергнута: MC и будучи собран с ncurses вместо slang не фликает. Значит есть какое-то решение.
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: [Решение найдено] Ncurses фликает. Что делать?

Сообщение yoshakar »

Кажется нашёл причину лагов. Дело оказалось в функции clear(). Вместо неё надо использовать erase().
Спасибо сказали: