Как я могу распечатать строку к консоли в определенных координатах в C++?

Проверка всех таблиц влияния транзакций в том же порядке является ключом к предотвращению наиболее распространенной из мертвых блокировок.

, Например:

Транзакция

UPDATE Table A SET Foo = 'Bar'
UPDATE Table B SET Bar = 'Foo'

транзакция B

UPDATE Table B SET Bar = 'Foo'
UPDATE Table A SET Foo = 'Bar'

Это, чрезвычайно вероятно, приведет к мертвой блокировке как [1 110], Транзакция получает блокировку на Таблице A, , транзакция B получает блокировку на таблице B, поэтому ни один из них не получает блокировку для их второй команды, пока другой не закончился.

Все другие формы мертвых блокировок обычно вызываются посредством использования высокой интенсивности и SQL Server, заходящего в тупик внутренне пока выделенные ресурсы.

8
задан Shawn 3 November 2009 в 13:46
поделиться

5 ответов

То, что вы делаете, - это использование некоторых очень специфичных для терминала магических символов в приложении на чистом C ++. Хотя это работает, вам, вероятно, будет гораздо проще использовать библиотеку, которая отвлекает вас от необходимости иметь дело с конкретными деталями реализации терминала и предоставляет функции, которые делают то, что вам нужно.

Узнайте, доступны ли библиотеки curses или ncurses для вашей системы .

4
ответ дан 3 November 2019 в 12:56
поделиться

Curses - это то, что вы ищете.

12
ответ дан 3 November 2019 в 12:56
поделиться

Я помню, как использовал gotoxy (x, y) в Turbo C ++ (conio.h) - хотя не знаю, сработает ли это для вас. Он перемещает курсор в координаты, указанные в x и y .

РЕДАКТИРОВАТЬ: Если вы используете Windows, вот клон gotoxy :

#include <windows.h>

void gotoxy(int x, int y)
{
  COORD coord;
  coord.X = x;
  coord.Y = y;
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
11
ответ дан 3 November 2019 в 12:56
поделиться

Несколько улучшений вашей функции:

void printToCoordinates(int x, int y, const char *format, ...)
{
    va_list args;
    va_start(args, format);
    printf("\033[%d;%dH", x, y);
    vprintf(format, args);
    va_end(args);
    fflush(stdout);
}

Эта версия:

5
ответ дан 3 November 2019 в 12:56
поделиться

Первое:

void printToCoordinates(int x, int y, string text)
{
    printf("\033[%d;%dH%s\n", x, x, text);
}

Вы не хотите копировать строковый аргумент, вы хотите передать его с помощью ( const ) ссылка. Кроме того, (единственный) правильный способ получить char * из std :: string - это вызвать его функцию-член c_str () :

void printToCoordinates(int x, int y, const std::string& text)
{
    printf("\033[%d;%dH%s\n", x, x, text.c_str());
}

Что касается вашего вопроса: C ++ не имеет возможности делать то, что вы хотите, но он позволяет вам использовать для этого способы, специфичные для платформы. Вам нужно будет сообщить нам свою платформу, чтобы получить содержательные ответы.

(единственный) правильный способ получить char * из std :: string - это вызвать его функцию-член c_str () :

void printToCoordinates(int x, int y, const std::string& text)
{
    printf("\033[%d;%dH%s\n", x, x, text.c_str());
}

Что касается ваш вопрос: C ++ не имеет возможности делать то, что вы хотите, но он позволяет вам использовать для этого способы, зависящие от платформы. Вам нужно будет сообщить нам свою платформу, чтобы получить содержательные ответы.

(единственный) правильный способ получить char * из std :: string - это вызвать его функцию-член c_str () :

void printToCoordinates(int x, int y, const std::string& text)
{
    printf("\033[%d;%dH%s\n", x, x, text.c_str());
}

Что касается ваш вопрос: C ++ не имеет возможности делать то, что вы хотите, но позволяет вам использовать для этого способы, зависящие от платформы. Вам нужно будет сообщить нам свою платформу, чтобы получить содержательные ответы.

4
ответ дан 3 November 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: