Witam
Mam małe zadanie do zrobienia. Chodzi o to , aby połączyć kilka programów w jeden z menu. Wciskając np 1 ma włączyć się program liczący silnie , wciskając 5 aby zakończyć działanie programu. Chodzi mi tylko , aby ktoś podpowiedział jak się za to zabrać nie liczę na gotowy kod.
Kody tych programów umieścić w odpowiednie funkcje. Potem w funkcji main umieścić w pętli kod wyświetlający użytkownikowi dostępne opcje, następnie pobierać od niego wybraną opcję i w instrukcji switch wywoływać odpowiednią funkcję. I wszystko ;). Pokombinuj i napisz jak utkniesz.
Wciśnięty klawisz zapisujesz do zmiennej i poprzez switch() odczytujesz wartość :)
char wybor;
wybor = getch();
switch( wybor )
{
case '1':
Silnia();
break;
case '2':
Funkcja2();
break;
case '3':
return 0;
break;
default:
break;
}
Pewnie utknie na tej "piątce", po wciśnięciu której program ma przerwać swoje działanie. Pewnie powinno się pokombinować coś z wątkami. Wątek główny wyświetlałby menu i na podstawie pobranego rozkazu uruchamiał drugi wątek z jednym z programów (jak pisałeś zamkniętym w funkcji). Jeśli jednak w trakcie wykonywania tego programu użytkownik wciśnie 5, to trzeba zarzymać przykładowe liczenie silni - czyzli ubić wątek z silnią?
Czy gdyby jeden z podprogramów przydzielał jakąś istotną pamięć, to czy wystarczy ot tak go ubić, czy wypadałoby jakoś tą pamięć pozwalniać?
@up
B Z D U R A
Żadnych wątków tu nie trzeba - wystarczy zwykła pętla while. Nie strzelaj do muchy z armaty!
@up
Latwiej trafic ;)
Petla while i jesli chce zeby to ladniej wygladalo to z windows.h biblioteki funkcje GET_ASYNCKEYSTATE jak dobrze pamietam tylko trzeba bufor ogarnac bo zapamietuje wczytane klawisze.
Będę powtarzał do znudzenia, do zaawansowanych UI konsolowych jest NCurses.
WinApi (z biblioteką windows.h) oferuje Ci pętlę komunikatów i obsługę WM_KEYDOWN (kiedy klawisz został wciśnięty). Dodatkowo nie zatrzymuje programu i wszystko działa nadzwyczajnie sprawnie. Polecam do nauczenia się po opanowaniu podstaw. Jest dużo świetnych kursów w internecie na ten temat.
WinApi to samobójstwo :P lepiej wziąć się za platformę .NET, dużo łatwiej się tego nauczyć :P
Wiem ,że w szkołach karzą uczyć się tego Microsoftowego gówna ale na prawdę polecam .NET i C# bo na studiach to będziecie wałkować xd
Aby dodać wychodzenie z programu to uzyj funkcji EXIT() i zrób tak:
case '5': // dodaj tego CASE 5 czyli 5 opcje
exit(1);
I tyle xd powinno działać xd
@Odyn nie wiem o co Ci chodzi, że WinApi to samobójstwo :P jestem samoukiem z programowania i dosyć szybko mi ta wiedza przyszła do głowy. Jedyną wadą jaką do tej pory zauważyłem to to, że WinApi jest oparte na strukturach :)
Ja nie mówię ,że nie da się tego nauczyć ale porównaj sobie skomplikowanie składni WinAPI z językami .NETowymi.
Po co sobie utrudniać życie xd
ale porównaj sobie skomplikowanie składni WinAPI z językami .NETowymi.
A teraz weź pod uwagę, że z wyjątkiem Metro, które nie wiadomo czy się przyjmie (oby nie), oraz Services for Unix, z którego nikt nie korzysta, wszystko inne włącznie z .Net Framework jest nakładką na WinAPI. Jakbyś nie chciał, to i tak z tego „microsoftowego gówna” musisz korzystać.
Może i masz racje. Ale mam nadzieje ,że się to kiedyś zmieni ;p
^^ Każdy pisze w tym, w czym mu wygodniej :P
Nie ma się co oszukiwać. Napisanie czegoś większego w winapi to koszmar. Trzeba prawie wszystko samemu obudowywać w wrappery, bo brak obiektowości okrutnie utrudnia życie. Stworzenie zwykłego okna to 2 strony kodu, brak gui builderów(przynajmniej ja się z takim wynalazkiem nie spotkałem).
@Odyn: ja tam bym wolał, żeby się nie zmieniło. Upada cała kompatybilność wsteczna, starsze programy na nowym rozwiązaniu pewnie by już nie ruszyły, nie mówiąc już o czymś napisanym np. w takim MFC. Chyba, że MS zostawiłby 2 systemy okien... to by dopiero było zamieszanie.
W sumie racja. Nieporęczne, ale potężne narzędzie. Piszę bazę danych w WinApi i mam już ponad 5000 linijek kodu, a efekty niewielkie ;p