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

Programowanie Wielofunkcyjne-wątkowe bez main'a (coś w tym stylu)

VPS Starter Arubacloud
+1 głos
245 wizyt
pytanie zadane 1 lipca 2015 w C# przez Dorion300 Szeryf (90,250 p.)
otagowane ponownie 5 lutego 2020 przez Dorion300

Dzień dobry.

Odkryłem że sposób który za chwilę podam jest przyjemniejszy do użytku (na początku) ale nie wiem czy jest rzeczywiście dobry i czy tak się powinno robić.

using System;
using System.Text;
using System.IO;
using System.Threading;

namespace TestMode
{
	public class MainClass
	{
		public static void wypisz()
		{
			FileStream plik = new FileStream ("tek.txt", FileMode.Open);
			byte[] array = new byte[1024];
			int i = plik.Read (array,0,1024);
			Console.WriteLine (Encoding.UTF8.GetString (array,0,i));
			plik.Close ();
			Console.ReadKey ();
		}

		public static void wpisz()
		{
			FileStream plik = new FileStream ("tek.txt", FileMode.Append);
			string tek = Console.ReadLine ();
			byte[] array = Encoding.UTF8.GetBytes (tek);
			plik.Write (array,0,array.Length);
			plik.Close ();
			Console.ReadKey ();
		}


		public static void Main ()
		{
			Console.WriteLine("Witaj. 1 aby wpisać, 2 aby wypisać na ekran");
			int wynik = Convert.ToInt32(Console.ReadLine ());
			switch (wynik) {
			case 1:
				new Thread (new ThreadStart (wpisz)).Start ();
				break;
			case 2:
				new Thread (new ThreadStart (wypisz)).Start ();
				break;
			default:
				break;
			} return;
		}
	}
}

Aktualnie kod jest bezsensowy ponieważ niektóre rzeczy się powtarzają i lepszym pomysłem jest umieszczeniem wszystko w main.

Ale to był tylko przykład.

 

Chodzi mi głównie o dużych programach gdzie niektóre schematy się powtarzają.

 

np. mamy grę gdzie są 2 stany - jeden np. na statku kosmicznym, drugi np. w kosmosie.

 

Oba te stany są całkowite różne i mają inne funkcje.

 

A ten pomysł który wyżej podałem pokazałem w jaki stan przejść.

 

Co o tym myślicie?

 

Z ciekawości chciałem zrobić prostą grę konsolową

ale problem się okazał taki że main jest zbyt duży mimo że przeniosłem znaczną część w inne funkcje.

 

A uważam że ten sposób nie o wiele czytelniejszy ale ma kilka błędów:

Zmienne - rozwiązanie:

1.zrobić jedno duże pudełko na zmienne i przekazywać je przez te "stany".

2.Zmienne globalne. (Prosta klasa statyczna ze zmiennymi np. Dane.zmienna;)

 

W jaki sposób to rozwiązać?

Sam nie wiem co lepsze.

 

Ta "gra" jest obiektowa w konsoli.

 

Pozdrawiam.

1 odpowiedź

+1 głos
odpowiedź 1 lipca 2015 przez niezalogowany
Powiem Ci szczerze, że czytam to drugi raz i nie bardzo rozumiem o co pytasz. Pomijam fakt, że tytuł to jakaś abstrakcja.
komentarz 1 lipca 2015 przez niezalogowany
BTW. "main jest zbyt duży"... Nie widziałeś jeszcze dużych funkcji ;) Nie przejmuj się objętnością metody, dopóki zawiera ona całą niezbędną logikę, która POWINNA się w niej znajdować.
komentarz 1 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
No, taki jestem... ale spróbuje jeszcze raz.

Mamy funkcję main.

w pewnym momencie main się kończy i rozpoczynają się inne funkcje i one dalej działają.

Czyli zamiast robić to "stosowo" że w main'ie rozpoczyna się funkcja i dopiero kiedy się kończy to kontynuje się main, to robię to tak że tworzy się tkz. druga funkcja main.

I pytanie, czy do dobry pomysł?

Gdzie przechowywać zmienne?

Przekazywać razem z funkcją czy zrobić jakiś obiekt statyczny z wszystkimi najważniejszymi zmiennymi?
komentarz 1 lipca 2015 przez Pascal Bywalec (2,720 p.)
Whodzi ci o wątki ??
komentarz 2 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
Tak. Pierwszy zaczyna drugi, pierwszy sie kończy a drugi dalej działa.
komentarz 2 lipca 2015 przez niezalogowany
Ah, nie zauważyłem, że wątki tam tworzysz - stąd całe nieporozumienie. A więc - wątki ogólnie rzecz ujmując to bardzo dobre rozwiązanie, pod warunkiem, że operacje w nich przeprowadzane są naprawdę zasobożerne - zauważysz to w aplikacjach z GUI - kiedy będziesz pobierał duże ilości danych z DB, albo przeprowadzał "ciężkie" obliczenia, to UI zamarznie, czekając na wykonanie się tych operacji.

Jeśli natomiast masz w wątkach wykonywać dodawanie, mnożenie i inne takie, to lepiej upchnąć to w zwykłej funkcji. W przeciwnym razie możesz osiągnąć odwrotny efekt, czyli zamiast wzrostu wydajności zauważysz jej spadek.

Podobne pytania

0 głosów
0 odpowiedzi 110 wizyt
pytanie zadane 26 stycznia 2017 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
4 odpowiedzi 390 wizyt
pytanie zadane 27 sierpnia 2015 w HTML i CSS przez Lukasz Bywalec (2,320 p.)
0 głosów
0 odpowiedzi 479 wizyt
pytanie zadane 30 grudnia 2020 w C# przez MichaEll0 Nowicjusz (240 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...