Programavimas

Kaip dirbti su temomis C #

Gija yra mažiausias proceso vykdymo vienetas. Daugialypis gijimas - tai galimybė turėti kelias gijas atmintyje tam tikru metu ir persijungti tarp jų, kad vienu metu būtų atliekamos kelios operacijos. „Microsoft“ .Net Framework puikiai palaiko darbą su gijomis.

Programavimo gijos C #

Norėdami dirbti su gijomis, turėtumėte įtraukti sistemą. Vardų srities gija į savo programą. Norėdami sukurti naują giją, turėtumėte pasinaudoti „ThreadStart“ įgaliotiniu ir perduoti nuorodą į metodą, kuris turėtų būti vykdomas gijoje. Atminkite, kad įgaliotasis yra tipui saugus funkcijų rodyklė. Šis kodo fragmentas parodo, kaip galite sukurti naują gijos objektą naudodami šį delegatą.

 Gija t = nauja gija (nauja ThreadStart (MyThreadMethod)); 

Norėdami pradėti naujai sukurtą giją, turėtumėte iškviesti pradžios metodą sukurtame gijų objekte. Tai iliustruoja šis kodų sąrašas. Atkreipkite dėmesį, kad gijų metodas „MyThreadMethod“ vykdomas naujai sukurtai gijai (vadinama darbuotojo gija).

 statinis negaliojantis Pagrindinis ()

        {

Gija t = nauja gija (nauja ThreadStart (MyThreadMethod));

t.Pradėti ();

Pultas.Skaitykite ();

        }

static void „MyThreadMethod“ ()

        {

Console.WriteLine („Labas pasaulis!“);

        }

Rodyti siūlų būsenas C #

Gijos atmintyje gali būti skirtingos būsenos - nutrauktas, fonas, veikia, sustabdytas, sustabdytas, nepradėtas ir kt. Gijos būsenos yra apibrėžtos sistemoje „ThreadState“. Jei gijoje nėra iškviestas pradžios metodas, gija yra būsenoje Nepradėta. Kai gijos egzemplioriuje iškviečiamas metodas Pradėti, gijos būsena pasikeičia iš Nepradėta į Vykdoma.

Šis kodo fragmentas rodo, kaip galite rodyti gijos būseną konsolėje.

 Gija t = nauja gija (nauja ThreadStart (MyThreadMethod));

t.Pradėti ();

Console.WriteLine („Gijos būsena yra:„ + t.ThreadState.ToString ());

Valdykite priekinius ir foninius siūlus C #

Siūlai gali veikti priekiniame plane arba fone. Aiškiai sukurtos temos yra pirmojo plano gijos. Vienas iš pagrindinių skirtumų tarp pirmojo plano ir fono gijų yra tas, kad jūsų programa gyvuoja tik tol, kol veikia viena ar daugiau priekinių gijų. Iš esmės, pirmojo plano gijos neleidžia nutraukti programos. Priešingai, fono gijos neišlaiko gyvos „Common Language Runtime“ aplinkos.

Naudodami „IsBackground“ ypatybę, galite nustatyti gijos fono būseną. Čia yra kodo pavyzdys, parodantis, kaip tai galima pasiekti.

 statinis negaliojantis Pagrindinis ()

        {

Gija t = nauja gija (nauja ThreadStart (MyThreadMethod));

t.Pradėti ();

t.IsBackground = tiesa;

Console.WriteLine („Gijos fono būsena yra:„ + t.IsBackground.ToString ());

Pultas.Skaitykite ();

        }

Galite sustabdyti arba atnaujinti giją, pasinaudodami „Suspend“ () ir „Tęsti“ () metodais, esančiais gijos objekte. Atminkite, kad galite atnaujinti anksčiau sustabdytą giją tik paskambinę metodu „Suspend ()“.

 Gija t = nauja gija (nauja ThreadStart (MyThreadMethod));

t.Pradėti ();

t.Sustabdyti (); // Sustabdo naujai sukurtą giją

t.Atnaujinti (); // Atnaujina pakabintą siūlą

Tačiau reikia pažymėti, kad „Thread.Suspend“ () ir „Thread.Resume“ () metodai buvo nebenaudojami. Verčiau turėtumėte naudoti „AutoResetEvent“ ir „EventWaitHandle“ metodus, kad sinchronizuotumėte veiklas, susijusias su gijomis.

Nustatykite temos prioritetą C #

Galite nustatyti gijos prioritetą, kad nustatytumėte santykinę procesoriaus laiko dalį, kurią gija, palyginti su kitomis atmintyje esančiomis gijomis. Gijos prioritetas apibrėžtas „ThreadPriority“ sąraše. Galimos reikšmės yra: Žemiausia, Žemiau Normali, Normali, Virš Normali ir Aukščiausia. Šis kodo fragmentas parodo, kaip galite nustatyti dviejų gijų gijų prioritetus, naudodami gijos objekto ypatybę.

 statinis negaliojantis Pagrindinis ()

        {

Gijos gija1 = nauja gija (nauja „ThreadStart“ (1 metodas));

Gijos gija2 = nauja gija (nauja „ThreadStart“ (2 metodas));

thread1.Priority = ThreadPriority.Highest;

thread2.Priority = ThreadPriority.Lowest;

siūlas2.Pradėti ();

siūlas1.Pradėti ();

Pultas.Skaitykite ();

        }

static void1 metodas ()

        {

už (int i = 0; i <10; i ++)

            {

Console.WriteLine („Pirmoji gija:„ + i “);

            }

        }

static void2 metodas ()

        {

už (int i = 0; i <10; i ++)

            {

Console.WriteLine („Antroji gija:„ + i “);

            }

        }

Vykdydami pirmiau pateiktą kodo fragmentą, pamatysite, kad pirmasis siūlas užbaigia jo vykdymą prieš antrąjį, nors antrasis siūlas buvo pradėtas prieš pirmąjį pagrindinio metodo giją.

Siūlai yra brangūs. Jie sunaudoja daug išteklių jūsų sistemoje, kad galėtų inicijuoti, perjungti kontekstą ir išlaisvinti sunaudotus išteklius. Todėl daugialypis sriegimas turėtų būti naudojamas protingai ir tik tada, kai to reikia. Kai naudojatės kelių gijų teikiamais pranašumais, visada patartina panaudoti siūlų grupes, kad būtų galima sukurti ir valdyti gijas pagal poreikį ir pagerinti jūsų programos reagavimą.