Execuția de cod în C # începe cu metoda principală. Metoda principală formează firul principal al aplicației. Un flux este o secvență de operații executate în program. Principalul thread poate rula mai mulți subordonați sau poate spune fire de lucru. În fiecare fir, se execută una sau o altă funcție. Se spune că în acest caz programul este paralealizat, adică se rup în mai multe fire care rulează în paralel. De fapt, pe un calculator uniprocesor, toate firele sunt executate succesiv de mici opțiuni succesiv unul după altul, creând astfel o iluzie a funcționării lor paralele. Câștigurile în timp real sunt obținute numai atunci când firele utilizează resurse hardware hardware diferite și / sau pe mașini multiprocesoare.
Un sistem multithread este încapsulat în clasa Thread. Această clasă este declarată ca o clasă sigilată, adică nu poate genera o nouă clasă din ea. Clasa Thread definește un număr de proprietăți și metode pentru gestionarea firelor.
Este important să rețineți că crearea unui fir este extrem de important pentru a crea un obiect Thread.
Unul dintre constructorii din această clasă are următoarea formă:
public Thread (pornirea ThreadStart)
Tipul ThreadStart este declarat în spațiul de nume System.Threading cu cuvântul cheie delegat și are următoarea semnătură:
delegația publică void ThreadStart ();
Fie, de exemplu, antetul unei funcții de streaming - void funcThread (), apoi crearea obiectului de pornire:
ThreadStart start = noua structură ThreadStart (funcThread);
Constructorul ThreadStart generează numele funcției care va fi executată în fir atunci când obiectul este creat.
Următorul pas este extrem de important pentru a crea un obiect de fir, trecând obiectul de pornire la constructorul de fire ca parametru:
Thread thrd = Thread nou (start);
După crearea unui obiect de streaming, este extrem de important să executați funcția de filetare pentru executare prin apelarea metodei Start utilizând metoda thrd:
Un obiect thread poate fi atribuit un nume folosind proprietatea Name:
strigat nm = thrd.Name;
Fluxul este considerat activ, indiferent dacă acesta se află într-o stare de oprire sau nu, până când funcția care rulează este terminată. După terminarea funcției de flux, fluxul este distrus. Această încheiere este normală. Pentru a afla dacă un fir este activ sau nu, puteți folosi proprietatea IsAlive, care este doar pentru citire. Proprietatea returnează adevărat dacă firul este activ și fals (fals), dacă nu. Această proprietate poate fi utilizată pentru a determina sfârșitul fluxului. Pentru a suspenda fluxul pentru o anumită perioadă de timp, puteți utiliza metoda statică:
public static void Sleep (int timp)
clasa Thread, unde parametrul de timp specifică timpul în milisecunde.
Pentru a consolida materialul, ia în considerare un exemplu care demonstrează materialul:
Console.WriteLine ("Fișierul principal este complet");
Această aplicație declară clasa MyThread. Constructorul de clase MyThread creează un obiect de flux utilizând o linie de cod:
thrd = Thread nou (nou ThreadStart (this.FnThr));
Apoi obiectul de flux are un nume, ĸᴏᴛᴏᴩᴏᴇ constructorul ia ca parametru și pornește firul folosind metoda Start (), care determină apelul metodei fluxului FnThr ().
În metoda FnThr (), este organizată o buclă care "contactează" de la 0 la 4. Înainte de a intra în bucla, metoda imprimă numele firului de pornire în consola și după sfârșitul ciclului, numele firului care și-a terminat lucrarea. Apelarea metodei Sleep () în bucla metodei FnThr () determină firul de la care a fost chemat să suspende execuția pentru perioada de timp specificată în milisecunde.
În metoda Main (), următoarele instrucțiuni creează cinci obiecte din clasa Thread:
// Creați o serie de referințe pentru obiecte de flux
MyThread [] mt = nou MyThread [5];
// Creați obiecte din clasa MyThread.
pentru (int j = 0; mt [j] = noul MyThread ("Descendent #" + j.ToString ()); După crearea fișierelor și executarea lor pentru execuție în constructorul clasei MyThread. aplicația execută firul principal și, în special, metoda Main () și cinci fișiere copil. Utilizând buclă: pentru (int j = 0; live = live | mt [j] .thrd.IsAlive; metoda Main () așteaptă ca firele să iasă. În exemplul de mai sus, firul a fost terminat folosind metoda IsAlive (). A doua modalitate, care vă permite să "așteptați" ca firul să se termine, este de a apela metoda Join (). Metoda Join () așteaptă până când firul pentru care a fost apelat este terminat. Când lucrați cu această metodă, este extrem de important să fiți precauți. Metoda Join () nu poate fi apelată înainte de pornirea tuturor firelor, care trebuie să funcționeze în paralel. Problema este că apelarea metodei Join () determină blocarea startului firelor care nu au început încă până când toate firele au fost întrerupte pentru care a fost apelată această metodă. FLUXURI Există diferite definiții ale termenului "debit", inclusiv "unitatea de execuție", "contorul de comandă separat" sau "entitatea care urmează să fie planificată în cadrul procesului". Deși fiecare dintre aceste definiții este în mod inerent corect, nici unul dintre ele. [citeste mai mult]. FLUXURI Există diferite definiții ale termenului "debit", inclusiv "unitatea de execuție", "contorul de comandă separat" sau "entitatea care urmează să fie planificată în cadrul procesului". Deși fiecare dintre aceste definiții este în mod inerent corect, nici unul dintre ele. [citeste mai mult]. Lucrul cu fișiere Exemplu de lucru cu un fișier Informații generale Streams pentru lucrul cu fișiere Organizarea lucrului cu fișiere Pentru a lucra cu fișiere în C ++, sunt utilizate trei tipuri de fluxuri: • fluxul de intrare. [citeste mai mult].Citiți de asemenea
Articole similare