Kaip įdiegti daugiagiją C++

Kaip Idiegti Daugiagija C



Multithreading C++ yra funkcija, leidžianti vienu metu atlikti kelias užduotis vienu metu. Gija yra konkretaus vykdomo proceso darbo vienetas. Daugybė gijų vienu metu vykdoma nepriklausomai viena nuo kitos, kad būtų galima atlikti kelių gijų kūrimą.

Kaip įdiegti daugiagiją C++

Kelių gijų programa turi dvi ar daugiau dalių, kurios turi tendenciją veikti vienu metu, kiekviena dalis yra žinoma kaip gija ir turi skirtingą vykdymo kelią. Daugybė gijų vienu metu vykdoma nepriklausomai viena nuo kitos, kad būtų galima atlikti kelių gijų kūrimą.







Būtinos sąlygos multithreading C++

„Windows“ sistemoje su gijomis susijusias funkcijas galima atlikti naudojant C++ 11 ir išplėstines versijas. Naudojant Dev-C++ kompiliatorių, pagal numatytuosius nustatymus jis yra C++ 3 versijoje, todėl jį reikia pakeisti į C++ 11 versiją rankiniu būdu. GNU C++11 aplinką galima pasirinkti pakeitus standartinius kalbos nustatymus.



Atidarykite „Dev-C++“ kompiliatorių ir užduočių juostoje eikite į „Įrankiai“. Pasirinkite „Compiler Options“, tada pasirinkite „Settings“, spustelėkite bloką „Kodo generavimas“, ir pasirodys komandų sąrašas. Iš „Kalbos standartas (-std)“ pasirinkite GNU C++11 ir spustelėkite Gerai. Dabar šis kompiliatorius yra nustatytas palaikyti gijų operacijas.




Atsisiųskite bibliotekas iš „GitHub“. ir įdėkite juos į Cpp kompiliatoriaus lib aplanką. Iškvieskite šias bibliotekas programoje naudodami #include 'mingw.thread.h' ir antraštės failus. Toliau pateikiama jo sintaksė:





std::thread gijos_objektas ( skambinti ) ;


std::thread palaiko #include 'mingw.thread.h' antraštės failas C++11. Tai gijų klasė ir reiškia vieną giją. Nauja gija sukuriama naudojant std::thread ir jai perduodama iškviečiama gija. Iškviečiamas yra vykdomasis kodas, kuris vykdomas, kai vykdoma gija. Galima skambinti bet kuriuo iš trijų toliau nurodytų tipų:

Kai objektas sukuriamas, jis paleidžia naują giją, kuri vykdo kodą iškviečiamoje dalyje.



Thread paleidimas naudojant Function Object

Funkcijos objektas gali būti naudojamas kaip iškviečiamas elementas gijai paleisti, o perkrovos operatorius () leidžia jį iškviesti:

klasė funkcija_objekto_klasė {
tuščias operatorius ( ) ( parametrai )
{
pareiškimai;
}
}
std::thread gijos_objektas ( function_object_class ( ) , params )


Perkrovos funkcija konstruktoriui pateikiama kaip pirmasis objektas, o teiginiai – kaip antrasis objektas.

Thread paleidimas naudojant Function Pointer

Apibrėžiamas funkcijos žymeklis, kuris vėliau naudojamas kaip iškviečiamas elementas gijai paleisti:

void function_call ( param )
{
pareiškimai;
}
std::thread thread_obj ( function_call, parametrai ) ;


Argumentai, kuriuos reikia perduoti, rašomi po funkcijos pavadinimo.

Thread paleidimas naudojant Lambda Expression

Siūlo objektą galima paleisti naudojant lambda kaip skambinamą elementą.

// Apibrėžkite lambda išraišką
automatinis f = [ ] ( parametrai )
{
pareiškimai;
} ;

std::thread gijos_objektas ( f, parametrai ) ;


Apibrėžiama lambda išraiška ir joje iškviečiami parametrai, kad būtų paleista gija.

Kai kuriais atvejais, prieš pradedant vykdyti kitą komandą, gija turi sustoti. The std::gija::prisijungti () funkcija naudojama laukti, kol gijos pabaiga. Pavyzdžiui, jei gijai priskiriame GUI užduotį, turime palaukti, kol ji baigsis, kad pirmiausia būtų tinkamai įkelta GUI, o tada bus vykdoma kita komanda.

tarp pagrindinis ( )
{

std::thread t1 ( skambinti ) ;
t1.prisijungti ( ) ;
pareiškimai;
}

Pavyzdys

Tai programa, kuri vykdoma kelių gijų kūrimui atlikti naudojant visus tris iškviečiamus. Trys skirtingi iškviečiami įrenginiai tris kartus vienu metu vykdo atitinkamas komandas, nepertraukiami vienas kito:

#include
#include
naudojant vardų erdvę std;


tuščias foo ( int Z )
{
dėl ( int i = 0 ; i < Z; i++ ) {
cout << „Gijos naudojant funkciją“
“ žymeklį kaip skambinti \n ;
}
}


klasė thread_obj {
viešas:
tuščias operatorius ( ) ( int x )
{
dėl ( int i = 0 ; i < x; i++ )
cout << 'Gijos naudojant funkciją'
“ objektą kaip skambinti \n ;
}
} ;


// pagrindinis kodas
tarp pagrindinis ( )
{
cout << '1, 2 ir 3 gijos'
„veikia savarankiškai“
<< endl;


sriegis th1 ( foo, 3 ) ;


sriegis th2 ( siūlas_obj ( ) , 3 ) ;


automatinis f = [ ] ( int x ) {
dėl ( int i = 0 ; i < x; i++ )
cout << 'Siūlas naudojant lambda'
“ išraiška kaip skambinti \n ;
} ;


sriegis th3 ( f, 3 ) ;

th1.prisijungti ( ) ;

th2.prisijungti ( ) ;

th3.prisijungti ( ) ;

grąžinti 0 ;
}


Šioje programoje trys iškviečiami elementai, įskaitant funkcijos žymeklį, funkcijos objektą ir lambda išraišką, naudojami trims gijomis paleisti vienu metu. 1, 2 ir 3 gijos spausdina savo reikšmes vienu metu, nepriklausomai viena nuo kitos, viena kitos nepertraukiant. Jie tris kartus spausdina savo vertybes. Funkcija join () naudojama laukti, kol gija baigsis.


Visų trijų gijų išėjimai rodomi atskirai ir kartojami tris kartus. Kiekvienas siūlas pirmiausia laukia, kol baigsis kitas.

Išvada

Multithreading C++ yra funkcija, leidžianti vienu metu atlikti kelias užduotis vienu metu. Kelių gijų programa turi dvi ar daugiau sekcijų, kurios gali veikti vienu metu, kiekviena dalis yra žinoma kaip gija ir turi atskirą vykdymo kelią. Yra trys iškviečiamos gijos, funkcijų rodyklės, funkcijų objektai ir lambda išraiškos. Tai įgalina daugiasriegius ryšius.