• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Loading bar

Object Storage Arubacloud
0 głosów
470 wizyt
pytanie zadane 12 kwietnia 2019 w C i C++ przez Teslum_369 Gaduła (4,190 p.)

Witam,

Chciałbym zaciągnąć od Was rady. Napisałem programik z loading barem i dodatkami typu kolorki. Wiem, że tutaj może być kwestia sporna, ponieważ to będzie raczej dotyczyło własnego upodobania, chociaż i tak chciałbym poznać co o tym sądzicie. Czy uważacie, iż taki loading bar jest okej? Czy może coś dodać np animację napisu Loading. Chciałbym, aby taki loading podobał się nie tylko mnie, ale innym (może wprowadzę kiedyś do gry czy coś). Więc jestem otwarty na wszelkie krytyki smiley. Oczywiście, mamy do czynienia tylko z konsolą okienkową. A może macie kompletnie inną wizję? Podzielcie się ze mną wink.

Tutaj kod:

#include <iostream>
#include <windows.h>


void loading(void)
{
		
	ShowWindow(GetConsoleWindow(), SW_MAXIMIZE);
	system("color 1F");
	
	HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
	
	COORD pos;
	pos.X = (168/2)-3;
	pos.Y = (58/2)-5;
	SetConsoleCursorPosition(screen, pos);
	std::cout << "Loading\n";
	
	pos.X = 0;
	pos.Y = (58/2);
	SetConsoleCursorPosition(screen, pos);
	for(int i{}; i<168; i++)
	{
		if(i == 50 || i == 90 || i== 100 || i == 120) Sleep(1000/3);
		std::cout << "\xb1";
		for(int j=0; j<16000000; j++) 
		{}
	}
	std::cout << "\n"; 
}

int main()
{

	loading();	
}

P.S. Standard C++11.

1 odpowiedź

+1 głos
odpowiedź 12 kwietnia 2019 przez Hiskiel Pasjonat (22,830 p.)
edycja 12 kwietnia 2019 przez Hiskiel

Moja opinia?
system(...) - tej funkcji nie używaj. Problem z bezpieczeństwem i wieloma innymi rzeczami jak multiplatformowość. Użyj SetConsoleTextAttribute instead.
Ustawiasz pozycję kursora na sztywno (linie 13-16). WinApi ma funkcje do pobierania wielkości bufora konsoli - tego prawdziwego jak i widzialnego.
Sleep(...) - tego też nie używaj.. includuj thread i chrono i zrób sobie std::this_thread::sleep_for(std::chrono::JEDNOSTKA_CZASU(ILOSC))

 

----WRAŻENIA WIZUALNE----

:V
Trochę za długie to jest. Pod cmder'em konsola wariuje, napis loading jest na środku, a na dole leci jakiś pasek z kwadracików (kodowanie złe) do 1 1/8 (na oko) paska. Wygląda to tak
Ja bym zrobił mały pasek, który składałby się z max 10-12 kratek.


---Á PROPOS KODU----

Zamiast bawić się z jakimiś pętlami itd pobawiłbym się z operatorem dzielenia i modulo. Chodzi o to, że jak masz np. 50kB danych do wysłania (załóżmy, że masz lekkiego klienta FTP na konsoli), to dzielisz sobie to na 12, wychodzi Ci 4.xxxxx, co oznacza, że co 4kB wysłane musisz zapalić jedną kratkę z loading bara i tutaj właśnie jest zabawa z modulo i dzieleniem. Dodatkowo trzeba to jeszcze gdzieś zapisywać, bo jakby np. przerwało nagle połączenie, to przecież nie może być tak, że połowa danych wysłana, a loading bar leci od początku (ale to już zależne od przypadku)

PS

Zapomniałem. Jeszcze trzeba się zmagać z tym, że przecież data może mieć NP te 50kB, a ty chcesz mieć loading bar szerokości 12kratek. Wtedy trzeba robić jakieś align'y czy inne cuda.

komentarz 12 kwietnia 2019 przez Hiskiel Pasjonat (22,830 p.)

Protokołów w konsoli? Jakich protokołów w konsoli? :0

 

No widzisz, u Ciebie wygląda to tak. I to jest to o czym pisałem - ustawianie na sztywno wielkości bufora. Zobacz to

komentarz 12 kwietnia 2019 przez Teslum_369 Gaduła (4,190 p.)
Wybacz xD FTP skojarzyłem z File Transfer Protocol haha
komentarz 12 kwietnia 2019 przez Hiskiel Pasjonat (22,830 p.)
No tak, FTP to File Transfer Protocol, ale protokoły nie są zależne od sposobu wyświetlania
komentarz 12 kwietnia 2019 przez j23 Mędrzec (194,920 p.)

@Hiskiel,

Sleep(...) - tego też nie używaj.. includuj thread i chrono i zrób sobie std::this_thread::sleep_for(std::chrono::JEDNOSTKA_CZASU(ILOSC))

Co za różnica? I tak używa WinAPI.

komentarz 12 kwietnia 2019 przez Hiskiel Pasjonat (22,830 p.)
Piszę to tak, bo tu mi chodzi o osobne złe praktyki. Już lepiej, żeby używał tam gdzie może dobrych praktyk, a tam gdzie musi WinApi.

Podobne pytania

0 głosów
0 odpowiedzi 114 wizyt
0 głosów
2 odpowiedzi 284 wizyt
pytanie zadane 6 czerwca 2021 w HTML i CSS przez mowmiheniek Stary wyjadacz (11,900 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...