С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
20 / 23 / 6
Регистрация: 15.10.2020
Сообщений: 134

Какой самый быстрый способ очистить консоль?

06.11.2021, 18:08. Показов 3486. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всего я нашел три способа это сделать:
Первый - используя system("cls"), но он занимает целых 40 миллисекунд (395050 такта), да и слишком уж просто выглядит.
Второй - вывести 27 новых линий, этот метод занимает 0-1 миллисекунду (16424 такта), но выглядит как костыль и использовать его нет особого желания. Я конечно понимаю что стандартная консоль Windows это распознает но все же..
Третий - с помощью WinApi:
C++
1
2
3
4
5
6
7
8
9
// stdhndl обозначен раньше
COORD coord = { 0, 0 };
DWORD count;
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(stdhndl, &csbi);
FillConsoleOutputCharacter(stdhndl, ' ',
    csbi.dwSize.X * csbi.dwSize.Y,
    coord, &count);
SetConsoleCursorPosition(stdhndl, coord);
Но он занимает уже 27 миллисекунд(271981 тактов), что тоже очень долго.

Кто нибудь знает как это сделать по быстрее?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2021, 18:08
Ответы с готовыми решениями:

Самый быстрый способ получить скрин экрана c++
Всем привет, вопрос в шапке. Не особо разбираюсь в этих темах. Что будет самое эффективное? Что быстрее GDI windows или DirectX? И от чего...

Наиболее быстрый способ записи в консоль
Какой наиболее быстрый способ отрисовки символов в консоли, если использовать исключительно WinAPI? Заранее благодарю за ответы

Какой самый простой способ передачи числа в процесс?
Есть главное приложение. В нём запускается дочерний процесс "push.exe" которое должно от родительского получить число и что-то сделать с...

5
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 191
08.11.2021, 01:28
Цитата Сообщение от BlackLightHack Посмотреть сообщение
Второй - вывести 27 новых линий
Да?
Количество строк в консольном окне задаётся в настройках Windows (или конкретного приложения) и может меняться программно.
Количество символов в строке консольного окна задаётся в настройках Windows (или конкретного приложения) и может меняться программно.

Цитата Сообщение от BlackLightHack Посмотреть сообщение
Кто нибудь знает как это сделать по быстрее?
Описанные в сообщении парадоксы создают впечатление, что внутри использованных функций заданный символ выводится много раз индивидуально (каждый вывод - отдельным вызовом функции), откуда и тормоза.

Я бы посмотрел на скорость вывода функции WriteConsole() - она выводит не одиночные символы, а заливает консоль сразу большим объёмом текста из буфера (причём с автоматическим переносом на следующую строку, если не влезло).
Есть надежда, что такой способ отработает быстрее.
1
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
08.11.2021, 02:49
BlackLightHack, попробуй другие методы с MSDN'а. Самому проверять время - влом. https://docs.microsoft.com/en-... the-screen
1
20 / 23 / 6
Регистрация: 15.10.2020
Сообщений: 134
10.11.2021, 16:21  [ТС]
Цитата Сообщение от psergee Посмотреть сообщение
Самому проверять время - влом
Первый метод самый быстрый! Вот бенчмарк:
Кликните здесь для просмотра всего текста
EXAMPLE 1
3.2376ms
Ticks: 10361

EXAMPLE 2
29.7804ms
Ticks: 95298

EXAMPLE 3
61.5603ms
Ticks: 196993


Добавлено через 16 минут
Цитата Сообщение от tiun Посмотреть сообщение
Я бы посмотрел на скорость вывода функции WriteConsole()
Да, скорость вывода действительно очень большая: 233 такта. На моей машине это 0.073 миллисекунды.
С этим можно что нибудь придумать

Честно говоря, не знаю, как я её пропустил
0
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
10.11.2021, 16:43
Цитата Сообщение от BlackLightHack Посмотреть сообщение
Первый метод самый быстрый! Вот бенчмарк:
Цитата Сообщение от BlackLightHack Посмотреть сообщение
Честно говоря, не знаю, как я её пропустил
Бывает
0
222 / 19 / 0
Регистрация: 15.08.2016
Сообщений: 47
01.12.2021, 10:57
Я бы еще попробовал на скорость эти 2 вызова: GetConsoleScreenBufferInfo (узнаем размер буфера) + ScrollConsoleScreenBuffer (прокрутка). Посмотрите пример отсюда
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Example 2
 
#include <windows.h>
 
void cls(HANDLE hConsole)
{
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    SMALL_RECT scrollRect;
    COORD scrollTarget;
    CHAR_INFO fill;
 
    // Get the number of character cells in the current buffer.
    if (!GetConsoleScreenBufferInfo(hConsole, &csbi))
    {
        return;
    }
 
    // Scroll the rectangle of the entire buffer.
    scrollRect.Left = 0;
    scrollRect.Top = 0;
    scrollRect.Right = csbi.dwSize.X;
    scrollRect.Bottom = csbi.dwSize.Y;
 
    // Scroll it upwards off the top of the buffer with a magnitude of the entire height.
    scrollTarget.X = 0;
    scrollTarget.Y = (SHORT)(0 - csbi.dwSize.Y);
 
    // Fill with empty spaces with the buffer's default text attribute.
    fill.Char.UnicodeChar = TEXT(' ');
    fill.Attributes = csbi.wAttributes;
 
    // Do the scroll
    ScrollConsoleScreenBuffer(hConsole, &scrollRect, NULL, scrollTarget, &fill);
 
    // Move the cursor to the top left corner too.
    csbi.dwCursorPosition.X = 0;
    csbi.dwCursorPosition.Y = 0;
 
    SetConsoleCursorPosition(hConsole, csbi.dwCursorPosition);
}
 
int main(void)
{
    HANDLE hStdout;
 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
 
    cls(hStdout);
 
    return 0;
}

Еще, можно конечно не вызывать SetConsoleCursorPosition в конце (это уже как вам надо).

Добавлено через 1 час 49 минут
Цитата Сообщение от BlackLightHack Посмотреть сообщение
Третий - с помощью WinApi
Тут еще может не хватать вызова FillConsoleOutputAttribute с таким же счетчиком (это если были выведены символы с другим цветом фона).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2021, 10:57
Помогаю со студенческими работами здесь

Какой самый быстрый способ решения СЛАУ?
Доброго дня. Помогите выбрать СЛАУ(системы линейных алгебраических уравнений), которым СЛАУ будет решаться компьютером быстрее всего

Считать квадратную матрицу. Какой самый быстрый способ это сделать?
Какие самые быстрые способы считывания в с++? Пример : мне надо считать квадратную матрицу. Какой самый быстрый способ это сделать?

Самый быстрый способ решения задачи a+b
несколько раз ходил на олимпиады, во многих из них в пробном туре даётся задача а+б, решаю её стандартным способом: cin &gt;&gt; a...

Самый быстрый способ передать числа в поток
Добрый вечер, форумчане. Спрошу на удачу, может кто съел уже собаку на этом. 1) Есть главный и дополнительный поток 2)...

Самый быстрый способ дополнить вектор массивом
есть вектор заполненный нулями: vector&lt;int&gt; v(100000); есть большой массив: int ar; for (int i = 0; i &lt; 100000;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru