Megosztás a következőn keresztül:


task_group osztály

Az task_group osztály párhuzamos munkagyűjteményt jelöl, amely várakozhat vagy megszakítható.

Szemantika

class task_group;

Tagok

Nyilvános konstruktorok

Név Description
task_group Túlterhelt. Új task_group objektumot hoz létre.
~task_group Destruktor Elpusztít egy objektumot task_group . A destruktor végrehajtása előtt az objektum vagy a wait-t, vagy a run_and_wait-t metódust kell meghívni, kivéve, ha a destruktor egy kivétel miatti verem visszatekerés eredményeként fut le.

Nyilvános módszerek

Név Description
lemondása Minden tőle telhetőt megtesz, hogy megszüntesse a feladatcsoportban gyökerező munka részfáját. Ha lehetséges, a tevékenységcsoportban ütemezett összes tevékenység tranzitív módon lesz megszakítva.
törlése folyamatban Tájékoztatja a hívót, hogy a feladatcsoport jelenleg éppen törlés alatt áll-e. Ez nem feltétlenül jelenti azt, hogy meghívták a cancel metódust az task_group objektumon (bár ez minden bizonnyal alkalmassá teszi a metódust a true visszaadására). Előfordulhat, hogy az task_group objektum beágyazott végrehajtást végez, és a munkafában feljebb lévő feladatcsoportot törölték. Ilyen esetekben, amikor a futtatókörnyezet előre meg tudja határozni, hogy a lemondás keresztülmegy ezen az task_group objektumon, az true is visszaadódik.
fut Túlterhelt. Feladat ütemezése az task_group objektumon. Ha egy task_handle objektumot paraméterként runad át, a hívó felelős az task_handle objektum élettartamának kezeléséért. Annak a metódusnak a verziója, amely paraméterként hivatkozik egy függvényobjektumra, a futtatókörnyezeten belüli halomfoglalást foglalja magában, amely kevésbé teljesíthető, mint az objektumra hivatkozó task_handle verzió használata. A paramétert _Placement használó verzió miatt a feladat elfogult a paraméter által megadott helyen történő végrehajtással szemben.
futtatás_és_várakozás Túlterhelt. Ütemez úgy egy feladatot, hogy az a hívókörnyezetben, beágyazottan fusson, az task_group objektum segítségével a teljes lemondási támogatás érdekében. A függvény ezután megvárja, amíg az task_group objektumon végzett összes munka befejeződött vagy megszakadt. Ha egy task_handle objektumot paraméterként run_and_waitad át, a hívó felelős az task_handle objektum élettartamának kezeléséért.
várj Megvárja, amíg az task_group objektumon végzett összes munka befejeződik vagy törlésre kerül.

Megjegyzések

A szigorúan korlátozott structured_task_group osztálytól eltérően az task_group osztály sokkal általánosabb szerkezet. Nem rendelkezik a structured_task_group által leírt korlátozásokkal. task_group az objektumok biztonságosan használhatók a szálak között, és szabadon felhasználhatók. A task_group szerkezet hátránya, hogy kis feladatok esetében nem teljesít olyan jól, mint a structured_task_group szerkezet.

További információ: Feladat-párhuzamosság.

Öröklési hierarchia

task_group

Requirements

Fejléc: ppl.h

Névtér: egyidejűség

cancel

Minden tőle telhetőt megtesz, hogy megszüntesse a feladatcsoportban gyökerező munka részfáját. Ha lehetséges, a tevékenységcsoportban ütemezett összes tevékenység tranzitív módon lesz megszakítva.

void cancel();

Megjegyzések

További információ: Lemondási.

lemondás alatt van

Tájékoztatja a hívót, hogy a feladatcsoport jelenleg éppen törlés alatt áll-e. Ez nem feltétlenül jelenti azt, hogy meghívták a cancel metódust az task_group objektumon (bár ez minden bizonnyal alkalmassá teszi a metódust a true visszaadására). Előfordulhat, hogy az task_group objektum beágyazott végrehajtást végez, és a munkafában feljebb lévő feladatcsoportot törölték. Ilyen esetekben, amikor a futtatókörnyezet előre meg tudja határozni, hogy a lemondás keresztülmegy ezen az task_group objektumon, az true is visszaadódik.

bool is_canceling();

Visszaadott érték

Annak jelzése, hogy az task_group objektum megszakítás alatt áll-e (vagy hamarosan garantáltan meg fog szakadni).

Megjegyzések

További információ: Lemondási.

futtat

Feladat ütemezése az task_group objektumon. Ha egy task_handle objektumot paraméterként runad át, a hívó felelős az task_handle objektum élettartamának kezeléséért. Annak a metódusnak a verziója, amely paraméterként hivatkozik egy függvényobjektumra, a futtatókörnyezeten belüli halomfoglalást foglalja magában, amely kevésbé teljesíthető, mint az objektumra hivatkozó task_handle verzió használata. A paramétert _Placement használó verzió miatt a feladat elfogult a paraméter által megadott helyen történő végrehajtással szemben.

template<
   typename _Function
>
void run(
   const _Function& _Func
);

template<
   typename _Function
>
void run(
   const _Function& _Func,
   location& _Placement
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle,
   location& _Placement
);

Paraméterek

_Funkció
A feladatkezelő törzsének végrehajtásához meghívandó függvényobjektum típusa.

_Func
Egy függvény, amelyet a feladat törzsének meghívására használnak. Ez lehet lambda kifejezés vagy más objektum, amely támogatja a függvényhívási operátor egy verzióját az aláírással void operator()().

_Elhelyezés
Hivatkozás arra a helyre, ahol a paraméter által képviselt feladatnak végre kell hajtania _Func .

_Task_handle
Az ütemezett munkára való hivatkozás. Vegye figyelembe, hogy az objektum élettartamáért a hívó felel. A futtatókörnyezet továbbra is várni fogja, hogy ez az task_group objektum életben maradjon, amíg meg nem hívják rajta a wait vagy run_and_wait metódust.

Megjegyzések

A futtatókörnyezet ütemezi a megadott munkafüggvényt, hogy egy későbbi időpontban fusson; ez lehetséges a hívó függvény visszatérése után is. Ez a metódus egy task_handle objektumot használ a megadott munkafüggvény másolatának tárolására. Ezért a metódusnak átadott függvényobjektumokban bekövetkező állapotváltozások nem jelennek meg a függvényobjektum másolatában. Emellett győződjön meg arról, hogy az egérmutatóval vagy a munkafüggvényre való hivatkozással átadott objektumok élettartama érvényes marad mindaddig, amíg a munkafüggvény vissza nem tér.

Ha a task_group objektum egy kivétel miatti veremvisszatekerés eredményeként szűnik meg, akkor nem szükséges garantálnia, hogy a hívás megtörtént a wait vagy run_and_wait metódusra. Ebben az esetben a destruktor megfelelően megszakítja a feladatot, és megvárja, amíg a _Task_handle paraméter által képviselt feladat befejeződik.

A metódus invalid_multiple_scheduling kivételt eredményez, ha a paraméter által _Task_handle megadott feladatkezelőt már ütemezték egy tevékenységcsoport-objektumra a run metóduson keresztül, és nem történt beavatkozó hívás sem az wait adott tevékenységcsoporthoz, sem run_and_wait a metódushoz.

futtatás_és_várakozás

Ütemez úgy egy feladatot, hogy az a hívókörnyezetben, beágyazottan fusson, az task_group objektum segítségével a teljes lemondási támogatás érdekében. A függvény ezután megvárja, amíg az task_group objektumon végzett összes munka befejeződött vagy megszakadt. Ha egy task_handle objektumot paraméterként run_and_waitad át, a hívó felelős az task_handle objektum élettartamának kezeléséért.

template<
   class _Function
>
task_group_status run_and_wait(
   task_handle<_Function>& _Task_handle
);

template<
   class _Function
>
task_group_status run_and_wait(
   const _Function& _Func
);

Paraméterek

_Funkció
A feladat törzsének végrehajtásához meghívandó függvényobjektum típusa.

_Task_handle
A feladat leírója, amelyet a hívó környezet beágyazottan fog futtatni. Vegye figyelembe, hogy az objektum élettartamáért a hívó felel. A futtatókörnyezet azt várja, hogy a run_and_wait a metódus végrehajtásának befejezéséig éljen.

_Func
Egy függvény, amely a feladat törzsének meghívására kerül. Ez lehet lambda kifejezés vagy más objektum, amely támogatja a függvényhívási operátor egy verzióját az aláírással void operator()().

Visszaadott érték

Annak jelzése, hogy a várakozás teljesült-e, vagy a tevékenységcsoport megszakadt egy explicit lemondási művelet vagy egy kivétel miatt, amely az egyik tevékenységéből származik. További információ: task_group_status.

Megjegyzések

Vegye figyelembe, hogy az objektumra task_group ütemezett feladatok közül legalább egy a hívókörnyezetben is végrehajthat beágyazott műveleteket.

Ha az objektumra task_group ütemezett feladatok közül legalább egy kivételt jelez, a futtatókörnyezet kiválaszt egy ilyen kivételt, és propagálja azt a run_and_wait metódus hívásából.

Amikor visszatér a run_and_wait metódusból egy task_group objektum esetében, a futtatókörnyezet visszaállítja az objektumot egy tiszta állapotba, hogy újra felhasználható legyen. Ide tartozik az az eset, amikor az task_group objektumot megszakították.

A nem kivételes végrehajtási útvonalon köteles meghívni vagy ezt a metódust, vagy a wait metódust, mielőtt a task_group destruktora lefutna.

feladat_csoport

Új task_group objektumot hoz létre.

task_group();

task_group(
   cancellation_token _CancellationToken
);

Paraméterek

_CancellationToken
A feladatcsoporthoz társítandó lemondási token. A tevékenységcsoport megszűnik, amikor a token érvénytelenítése megtörténik.

Megjegyzések

A lemondási tokent használó konstruktor létrehoz egy task_group-t, amelyet a tokenhez társított forrás lemondásakor törölnek. Ha explicit lemondási tokent ad meg, az elkülöníti ezt a feladatcsoportot attól, hogy részvételt vegyen egy olyan implicit lemondásban, amelyet egy másik tokent használó vagy token nélküli szülőcsoport kezdeményez.

~task_group

Elpusztít egy objektumot task_group . A destruktor végrehajtása előtt az objektum vagy a wait-t, vagy a run_and_wait-t metódust kell meghívni, kivéve, ha a destruktor egy kivétel miatti verem visszatekerés eredményeként fut le.

~task_group();

Megjegyzések

Ha a destruktor normál végrehajtás eredményeként fut (például kivétel miatt nem halmozódik fel a verem), és sem a waitrun_and_wait metódusokat nem hívták meg, a destruktor missing_wait kivételt okozhat.

wait

Megvárja, amíg az task_group objektumon végzett összes munka befejeződik vagy törlésre kerül.

task_group_status wait();

Visszaadott érték

Annak jelzése, hogy a várakozás kielégítésre került-e, vagy a feladatcsoport törölve lett egy explicit lemondási operáció vagy egy kivétel miatt, amely az egyik feladatából származik. További információ: task_group_status.

Megjegyzések

Vegye figyelembe, hogy az objektumra task_group ütemezett feladatok közül legalább egy a hívókörnyezetben is végrehajthat beágyazott műveleteket.

Ha az objektumra task_group ütemezett feladatok közül legalább egy kivételt jelez, a futtatókörnyezet kiválaszt egy ilyen kivételt, és propagálja azt a wait metódus hívásából.

Egy wait objektum meghívása task_group tiszta állapotba állítja vissza, ahol újra felhasználható. Ide tartozik az az eset, amikor az task_group objektumot megszakították.

A nem kivételes végrehajtási útvonalon köteles meghívni vagy ezt a metódust, vagy a run_and_wait metódust, mielőtt a task_group destruktora lefutna.

Lásd még

egyidejű névtér
structured_task_group osztály
task_handle osztály