by Anonymous » 09 Mar 2025, 10:36
Ich habe mit C ++ farbige Animationen im Terminal erstellt, aber mit der Leistungsabnahme, die ANSI mit sich bringt, angefangen.
Ich möchte eine volle Farbe im Terminal haben und gleichzeitig eine anständige Menge an Geschwindigkeit beibehalten. Ich verwende derzeit _write , um an das Terminal zu schreiben. Ich vermute, dass ANSI die Wartezeiten erhöht, weil es die Raumnutzung erhöht hat: \ x1b [48; 2; 000; 000; 000m für einen Buchstaben mit vollständig unabhängigem RGB. Dies ist 20-mal teurer als einfach einen einzelnen Buchstaben an das Terminal zu schreiben.
Code: Select all
#include
#include
#include
#include
int main()
{
HANDLE consoleIn = GetStdHandle(STD_INPUT_HANDLE);
DWORD dwMode;
GetConsoleMode(consoleIn, &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(consoleIn, dwMode);
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
GetConsoleScreenBufferInfo(console, &screen);
short columns = screen.srWindow.Right - screen.srWindow.Left + 1;
short rows = screen.srWindow.Bottom - screen.srWindow.Top + 1;
int newfd = dup(STDOUT_FILENO);
char buffer[columns * rows];
int i;
for (i = 0; i < columns * rows; i++)
{
buffer[i] = ' ';
}
int fileHandle = 0;
auto start = std::chrono::high_resolution_clock::now();
for (i = 0; i < 500; i++)
{
_write(newfd, buffer, sizeof(buffer));
}
auto finish = std::chrono::high_resolution_clock::now();
std::cout
Ich habe mit C ++ farbige Animationen im Terminal erstellt, aber mit der Leistungsabnahme, die ANSI mit sich bringt, angefangen. [url=viewtopic.php?t=14917]Ich möchte[/url] eine volle Farbe im Terminal haben und gleichzeitig eine anständige Menge an Geschwindigkeit beibehalten. Ich verwende derzeit _write , um an das Terminal zu schreiben. Ich vermute, dass ANSI die Wartezeiten erhöht, weil es die Raumnutzung erhöht hat: \ x1b [48; 2; 000; 000; 000m für einen Buchstaben mit vollständig unabhängigem RGB. Dies ist 20-mal teurer als einfach einen einzelnen Buchstaben an das Terminal zu schreiben.[code]#include
#include
#include
#include
int main()
{
HANDLE consoleIn = GetStdHandle(STD_INPUT_HANDLE);
DWORD dwMode;
GetConsoleMode(consoleIn, &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(consoleIn, dwMode);
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
GetConsoleScreenBufferInfo(console, &screen);
short columns = screen.srWindow.Right - screen.srWindow.Left + 1;
short rows = screen.srWindow.Bottom - screen.srWindow.Top + 1;
int newfd = dup(STDOUT_FILENO);
char buffer[columns * rows];
int i;
for (i = 0; i < columns * rows; i++)
{
buffer[i] = ' ';
}
int fileHandle = 0;
auto start = std::chrono::high_resolution_clock::now();
for (i = 0; i < 500; i++)
{
_write(newfd, buffer, sizeof(buffer));
}
auto finish = std::chrono::high_resolution_clock::now();
std::cout