C ++ получать размер буфера консоли

Edit: Благодаря комментарию @Trauma, смотрите post, который он имел, и я вдохновил, чтобы делать что-то похожим с библиотекой <conio.h>


Sources: Client.cpp - Server.cpp


Они обобщают: Возможно получать размер буфера etrada консоли? Тот, который содержит то, что мы пишем перед тем, как нажимать на Enter и до того, как cin возьмите стоимость распределять их ему в переменные. Или Буфер, который содержит информацию пока мы вводим текст из-за одного getchar() или один scanf().

Спросил в Стакковерфлов Офисиаль, но они наполнили меня отрицательными обетами и у меня не было какого-либо ответа. Я думаю, что он мог бы решать это используя getch(), один switch(){}, и один GotoXY() для консоли, но это был бы мой последний ресурс.


Я использую WinSock2.h, чтобы писать простого "Комманд Лине Чат" в C ++. My IDE - Code:: Blocks. Функционируй хорошо, есть server.cpp => server.exe который recive пакеты, посланные любым клиентом client.cpp => client.exe и потом пересылает сообщение recivido во всех доступных клиентов (за исключением отправителя). Я использую threads, чтобы мочь посылать пакеты в то же время, что я reciviendo другие.

"Проблема" состоит в том, что, если ты пишешь сообщение, и в то же время другой клиент посылает тебе пакет, server посылает этот пакет к тебе, и thread, ответственный управлять о входящих packetes decifra и это печатает в консоли сразу, отрезая сообщение, которое ты пишешь из-за половины (не упоминая '\n' конец, который приходит по умолчанию).


Пример:
Клиент 1

Присоединяясь в Сервер...
Соединенный под идентификацией: 1

> здесь я начинаюсь в escri...

Вдруг присоединяется второй Клиент

Присоединяясь в Сервер...
Соединенный под идентификацией: 2

> Hooolaa, что tall! *enter*
>

Направленная в Клиента 1

Присоединяясь в Сервер...
Соединенный под идентификацией: 1

> здесь я начинаю в escriCliente 2: Hooolaa, что tall!
> bir мое сообщение *enter*

В конце концов, направленная в Клиента 2

Присоединяясь в Сервер...
Соединенный под идентификацией: 2

> Hooolaa, что tall! *enter*
Клиент 1: здесь я начинаю писать мое сообщение
>


Моя идея состоит в том, чтобы способствовать тому, чтобы клиент поместил входящие сообщения в очередь, вместо того, чтобы печатать их сразу, и что empieze в des - приклеивать и печатать только, когда буфер консоли будет пустым (уже будьте, потому что я жал enter, или потому что я удалил все то, у что было сочинение). (Мое намерение состоит в том, чтобы добавлять другой thread, который проверяет каждые 0,02 длина вышеупомянутого динамического буфера, и actualize глобальная так называемая переменная bufflen

int bufflen = 0;

void length_test(){
    while (true){
        bufflen = ????????; /*No se que poner, se me ocurre algo como length(consolebuffer); pero ni idea*/
        Sleep(20);
    }
}

int main()
{
    CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)length_test, NULL, NULL, NULL);

    .
    .
    .

    return 0;
}

Уже я провожу некоторое время споря и одна из двух, или нет ничего такого из специфического средства, или я не знаю какую-то основную значимую концепцию с темой, для googlearlo (как например: "имя буфера, который ты ищешь, - 'talnombre'"). В любом случае, это ближе, что я был нахождения ответа, он был с этим post страницы на английском, где кто-то задает похожий вопрос, но с гораздо более простой целью, тогда ответы передают в как добиваться этой цели более простого способа, не упоминая ни о чем относительно длины буфера консоли.

6
задан 23.05.2017, 15:39
0 ответов