Programmēšana

Kā strādāt ar diegiem C #

Vītne ir mazākā izpildes vienība procesā. Daudzlīniju vītne ir iespēja noteiktā laikā atmiņā saglabāt vairākus pavedienus un pārslēgties starp tiem, lai vienlaikus rīkotos ar vairākām darbībām. Microsoft .Net Framework nodrošina lielisku atbalstu darbam ar pavedieniem.

Programmēšanas pavedieni C #

Lai strādātu ar pavedieniem, lietojumprogrammā jāiekļauj sistēma. Vārdvietas vītne. Lai izveidotu jaunu pavedienu, jums vajadzētu izmantot ThreadStart delegātu un nodot atsauci uz metodi, kas jāizpilda pavedienā. Ņemiet vērā, ka delegāts ir tipam drošs funkciju rādītājs. Šis koda fragments parāda, kā, izmantojot šo pilnvaroto, varat izveidot jaunu pavedienu objektu.

 Thread t = new Thread (jauns ThreadStart (MyThreadMethod)); 

Lai sāktu jaunizveidoto pavedienu, jums jāizsauc sākuma metode uz izveidotā pavediena objekta. To ilustrē šāds kodu saraksts. Ņemiet vērā, ka pavedienu metodi MyThreadMethod izpilda jaunajam izveidotajam pavedienam (ko sauc par darba ņēmēja pavedienu).

 static void Main ()

        {

Thread t = new Thread (jauns ThreadStart (MyThreadMethod));

t.Sākt ();

Konsole. Lasīt ();

        }

static void MyThreadMethod ()

        {

Console.WriteLine (“Sveika pasaule!”);

        }

Parādīt pavedienu stāvokļus C #

Vītne atmiņā var būt dažādos stāvokļos - pārtraukta, fona, darbojas, apturēta, apturēta, neuzsākta utt. Vītņu stāvokļi ir definēti sistēmā ThreadState esošajā uzskaitījumā. Vītņojot vārdus. Ja vien pavedienā netiek izsaukta sākuma metode, pavediens atrodas stāvoklī Sākt. Kad pavediena instancē tiek izsaukta metode Sākt, pavediena stāvoklis mainās no Sākotnēts uz Darbojas.

Šis koda fragments parāda, kā konsolē var parādīt pavediena stāvokli.

 Thread t = new Thread (jauns ThreadStart (MyThreadMethod));

t.Sākt ();

Console.WriteLine (“Vītnes stāvoklis ir:“ + t.ThreadState.ToString ());

Vadīt priekšplāna un fona pavedienus C #

Vītnes var darboties vai nu priekšplānā, vai fonā. Tieši izveidotie pavedieni ir priekšplāna pavedieni. Viena no galvenajām atšķirībām starp priekšplāna pavedienu un fona pavedienu ir tā, ka jūsu lietojumprogramma darbojas tikai tik ilgi, kamēr darbojas viens vai vairāki priekšplāna pavedieni. Būtībā priekšplāna pavedieni novērš lietojumprogrammas pārtraukšanu. Turpretī fona pavedieni neuztur kopīgas valodas izpildlaika vidi dzīvu.

Izmantojot rekvizītu IsBackground, pavediena fona statusu var iestatīt. Šeit ir koda piemērs, kas parāda, kā to var sasniegt.

 static void Main ()

        {

Thread t = new Thread (jauns ThreadStart (MyThreadMethod));

t.Sākt ();

t.IsBackground = true;

Console.WriteLine (“Vītnes fona statuss ir:“ + t.IsBackground.ToString ());

Konsole. Lasīt ();

        }

Jūs varat apturēt vai atsākt pavedienu, izsaucot pavediena objektā metodes Suspend () un Resume (). Ņemiet vērā, ka atsākt pavedienu, kuru iepriekš apturējāt, var tikai, veicot izsaukumu uz metodi Apturēt ().

 Thread t = new Thread (jauns ThreadStart (MyThreadMethod));

t.Sākt ();

t.Apturēt (); // Aptur jaunizveidoto pavedienu

t.atsākt (); // Atsāk apturēto pavedienu

Tomēr jāatzīmē, ka metodes Thread.Suspend () un Thread.Resume () ir novecojušas. Drīzāk jums jāizmanto metodes AutoResetEvent un EventWaitHandle, lai sinhronizētu darbības, kurās iesaistīti pavedieni.

Iestatīt pavediena prioritāti C #

Jūs varat kontrolēt pavediena prioritāti, lai noteiktu procesora laika relatīvo daļu, ko pavediens saņems, salīdzinot ar citiem pavedieniem, kas atrodas atmiņā. Vītnes prioritāte ir definēta ThreadPriority uzskaitījumā. Iespējamās vērtības ir: Zemākā, Zemāka par normālu, Normāla, Virs normāla un Augstākā. Šis koda fragments parāda, kā jūs varat iestatīt divu pavedienu pavedienu prioritātes, izmantojot pavediena objekta rekvizītu Prioritāte.

 static void Main ()

        {

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

Thread thread2 = new Thread (jauns ThreadStart (2. metode));

thread1.Priority = ThreadPriority.Highest;

thread2.Priority = ThreadPriority.Lowest;

pavediens2.Sākt ();

pavediens1.Sākt ();

Konsole. Lasīt ();

        }

static void Method1 ()

        {

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

            {

Console.WriteLine (“Pirmais pavediens:“ + i);

            }

        }

static void2. metode ()

        {

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

            {

Console.WriteLine (“Otrais pavediens:“ + i);

            }

        }

Izpildot iepriekš minēto koda fragmentu, jūs redzēsiet, ka pirmais pavediens pabeidz izpildi pirms otrā pavediena, lai gan otrais pavediens tika sākts pirms galvenā pavediena galvenajā metodē.

Vītnes ir dārgas. Viņi patērē daudz resursu jūsu sistēmā, lai tos inicializētu, pārslēgtu kontekstus un atbrīvotu patērētos resursus. Līdz ar to daudzsavienojums jāizmanto saprātīgi un tikai tad, kad tas ir nepieciešams. Kad jūs izmantojat vairāku pavedienu priekšrocības, vienmēr ieteicams izmantot pavedienu kopas, lai pēc pieprasījuma izveidotu un pārvaldītu pavedienus un uzlabotu lietojumprogrammas atsaucību.

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