Проблема с потоками в ncurses C

Рейтинг: 1Ответов: 0Опубликовано: 04.02.2023

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

#include <stdio.h>
#include "ncurses.h"
#include "pthread.h"

WINDOW *chat, *input;

void writeMsg(void *vargp) {
    while (1) {
        char buffer[100];
        int key, j = 0;
        while ((key = wgetch(input)) != 10) {
            if (key == KEY_RESIZE) {
                wclear(input);
                wrefresh(input);
            } else if (key == KEY_BACKSPACE || key == KEY_DC || key == 127) {
                wdelch(input);
                j--;
                buffer[j] = 0;
            } else {
                buffer[j] = key;
                j++;
            }
        }
        printf("%s", buffer);
    }
}

int main() {
    initscr();
    chat = newwin(LINES - 2, COLS, 0, 0);
    wrefresh(chat);
    input = newwin(3, COLS, LINES - 3, 0);
    wrefresh(input);

    pthread_t thread_id;
    pthread_create(&thread_id, NULL, writeMsg, NULL);
    pthread_join(thread_id, NULL);

    endwin();
    return 0;
}

Если это нельзя пофиксить, то подскажите, пожалуйста, альтернативы ncurses для linux, которые хорошо работают с потоками.

Ответы

Ответов пока нет.