• 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)

+1 głos
96 wizyt
pytanie zadane 1 lipca 2015 w C# i .NET przez Dorion300 Szeryf (90,070 p.)

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 ZlapZabijIZakop Nałogowiec (32,520 p.)
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 ZlapZabijIZakop Nałogowiec (32,520 p.)
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,070 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,730 p.)
Whodzi ci o wątki ??
komentarz 2 lipca 2015 przez Dorion300 Szeryf (90,070 p.)
Tak. Pierwszy zaczyna drugi, pierwszy sie kończy a drugi dalej działa.
komentarz 2 lipca 2015 przez ZlapZabijIZakop Nałogowiec (32,520 p.)
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
1 odpowiedź 67 wizyt
0 głosów
2 odpowiedzi 72 wizyt
pytanie zadane 11 listopada 2018 w C# i .NET przez Ditrix Mądrala (5,470 p.)
0 głosów
1 odpowiedź 117 wizyt
pytanie zadane 24 marca 2018 w C# i .NET przez Squu Użytkownik (520 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

64,233 zapytań

110,623 odpowiedzi

231,914 komentarzy

46,972 pasjonatów

Przeglądających: 234
Pasjonatów: 15 Gości: 219

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...