Programiranje

Kako delati z nitmi v jeziku C #

Nit je najmanjša enota izvrševanja v procesu. Večnitnost je zmožnost imeti več niti v pomnilniku v določenem trenutku in preklapljati med njimi za istočasno obdelavo več operacij. Microsoftov .Net Framework nudi odlično podporo za delo z nitmi.

Programiranje niti v jeziku C #

Če želite delati z nitmi, v aplikacijo vključite imenski prostor System.Threading. Če želite ustvariti novo nit, morate izkoristiti delegat ThreadStart in posredovati sklic na metodo, ki naj se izvede v niti. Upoštevajte, da je delegat tipično varen funkcijski kazalec. Naslednji delček kode prikazuje, kako lahko s tem delegatom ustvarite nov predmet niti.

 Tema t = nova nit (nov ThreadStart (MyThreadMethod)); 

Če želite zagnati novo ustvarjeno nit, morate na predmetu niti, ki ste ga ustvarili, poklicati metodo Start. To ponazarja naslednji seznam kod. Upoštevajte, da se metoda niti MyThreadMethod izvaja v novi niti (imenovani delovna nit), ki je bila ustvarjena.

 statična praznina Main ()

        {

Tema t = nova nit (nov ThreadStart (MyThreadMethod));

t.Start ();

Console.Read ();

        }

statična praznina MyThreadMethod ()

        {

Console.WriteLine (»Pozdravljeni, svet!«);

        }

Prikaži stanja niti v jeziku C #

Nit v pomnilniku je lahko v različnih stanjih - prekinjena, v ozadju, tekoča, ustavljena, zaustavljena, nezagnana itd. Stanja niti so definirana v naštevanju ThreadState, ki je na voljo v imenskem prostoru System.Threading. Če metoda niti ne pokliče niti, je nit v stanju Nezagon. Ko se na primerku niti prikliče metoda Start, se stanje niti spremeni iz Unstarted v Running.

Naslednji delček kode prikazuje, kako lahko v konzoli prikažete stanje niti.

 Tema t = nova nit (nov ThreadStart (MyThreadMethod));

t.Start ();

Console.WriteLine ("Stanje niti je:" + t.ThreadState.ToString ());

Nadzirajte niti ospredja in ozadja v jeziku C #

Niti se lahko izvajajo v ospredju ali v ozadju. Niti, ki jih izrecno ustvarite, so niti v ospredju. Ena glavnih razlik med nitjo v ospredju in niti v ozadju je, da vaša aplikacija živi samo, dokler se izvaja ena ali več niti v ospredju. V bistvu niti v ospredju preprečujejo zaustavitev aplikacije. Nasprotno pa niti v ozadju ne ohranjajo okolja Common Language Runtime.

Stanje niti lahko nastavite z lastnostjo IsBackground. Tu je primer kode, ki prikazuje, kako je to mogoče doseči.

 statična praznina Main ()

        {

Tema t = nova nit (nov ThreadStart (MyThreadMethod));

t.Start ();

t.IsBackground = true;

Console.WriteLine ("Stanje ozadja niti je:" + t.IsBackground.ToString ());

Console.Read ();

        }

Nit lahko začasno ustavite ali nadaljujete tako, da v objektu niti prikličete metode Suspend () in Resume (). Upoštevajte, da lahko nit, ki ste jo že prekinili, nadaljujete samo s klicem metode Suspend ().

 Tema t = nova nit (nov ThreadStart (MyThreadMethod));

t.Start ();

t.Suspend (); // Začasno ustavi novo ustvarjeno nit

t.Resume (); // Nadaljuje visečo nit

Vendar je treba opozoriti, da sta metodi Thread.Suspend () in Thread.Resume () zastareli. Za sinhronizacijo dejavnosti, ki vključujejo niti, raje uporabite metodi AutoResetEvent in EventWaitHandle.

Nastavite prednost niti v jeziku C #

Prednost niti lahko nadzorujete, da določite relativni delež časa procesorja, ki ga bo nit dobila v primerjavi z drugimi nitmi, ki se nahajajo v pomnilniku. Prednost niti je definirana v naštevanju ThreadPriority. Možne vrednosti vključujejo: Najnižje, Spodaj normalno, Običajno, Zgoraj normalno in Najvišje. Naslednji delček kode prikazuje, kako lahko nastavite prioritete niti dveh niti z uporabo lastnosti Priority predmeta niti.

 statična praznina Main ()

        {

Thread thread1 = new Thread (new ThreadStart (Method1));

Thread thread2 = new Thread (new ThreadStart (Method2));

thread1.Priority = ThreadPriority.Highest;

thread2.Priority = ThreadPriority.Lowest;

thread2.Start ();

thread1.Start ();

Console.Read ();

        }

static void Method1 ()

        {

za (int i = 0; i <10; i ++)

            {

Console.WriteLine (“Prva nit:“ + i);

            }

        }

static void Method2 ()

        {

za (int i = 0; i <10; i ++)

            {

Console.WriteLine (“Druga nit:“ + i);

            }

        }

Ko izvedete zgornji delček kode, boste videli, da prva nit dokonča svoje izvajanje pred drugo nitjo, čeprav se je druga nit začela pred prvo nitjo v metodi Main.

Niti so drage. V vašem sistemu porabijo veliko virov za inicializacijo, preklapljanje kontekstov in sprostitev porabljenih virov. Zato je treba večnitnost uporabljati premišljeno in samo takrat, ko je to potrebno. Ko izkoristite večnitnost, je vedno priporočljivo izkoristiti področja niti, da ustvarite in upravljate niti na zahtevo ter izboljšate odzivnost vaše aplikacije.

$config[zx-auto] not found$config[zx-overlay] not found