strukturált_feladat_csoport osztály

Az structured_task_group osztály a párhuzamos munka erősen strukturált gyűjteményét jelöli. Az egyes párhuzamos feladatokat sorba állíthatja egy structured_task_group használatával task_handle objektumokkal, és megvárhatja a befejezésüket, vagy megszakíthatja a feladatcsoportot, mielőtt befejezték volna a végrehajtást, ami megszakít minden olyan feladatot, amely még nem kezdte meg a végrehajtást.

Szemantika

class structured_task_group;

Tagok

Nyilvános konstruktorok

Név Description
struktúrált feladatcsoport (structured_task_group) Túlterhelt. Új structured_task_group objektumot hoz létre.
~structured_task_group Destruktor Elpusztít egy objektumot structured_task_group . A destruktor végrehajtása előtt meg kell hívnia az objektum wait vagy run_and_wait metódusát, kivéve, ha a destruktor kivétel miatt a verem visszatekerése során fut.

Nyilvános módszerek

Név Description
lemondása Minden tőle telhetőt megtesz, hogy lemondja a feladatcsoportban gyökerező munkafá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 arról, hogy a feladatcsoport jelenleg megszakítás alatt áll-e. Ez nem feltétlenül jelenti azt, hogy a cancel metódust meghívták az structured_task_group objektumra (bár ez biztosítja, hogy a metódus visszatérjen a true-vel). Előfordulhat, hogy az structured_task_group objektum beágyazott végrehajtást végez, és a munkafában magasabban lévő tevékenységcsoport törölve lett. Ilyen esetekben, amikor a futtatókörnyezet előre meg tudja határozni, hogy a lemondás keresztülmegy ezen az structured_task_group objektumon, az true is visszaadódik.
fut Túlterhelt. Feladat ütemezése az structured_task_group objektumon. A hívó kezeli a paraméterben átadott objektum élettartamát task_handle_Task_handle . 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 structured_task_group objektum segítségével a teljes lemondási támogatás érdekében. 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. A függvény ezután megvárja, amíg az structured_task_group objektumon végzett összes munka befejeződött vagy megszakadt.
várj Megvárja, amíg az structured_task_group összes munka befejeződik vagy le lett mondva.

Megjegyzések

A teljesítmény eléréséhez számos súlyos korlátozás vonatkozik az structured_task_group objektumok használatára:

  • Egyetlen objektumot structured_task_group nem használhat több szál. Az objektumon végzett structured_task_group összes műveletet az objektumot létrehozó szálnak kell végrehajtania. A szabály két kivétele a cancel és is_canceling tagfüggvények. Előfordulhat, hogy az objektum nem szerepel a lambda kifejezés rögzítési listájában, és nem használható egy tevékenységen belül, kivéve, ha a tevékenység a lemondási műveletek egyikét használja.

  • Az összes, a structured_task_group objektumhoz ütemezett feladat ütemezése task_handle objektumok használatával történik, amelyek élettartamát Önnek kell explicit módon kezelnie.

  • Több csoport csak teljesen beágyazott sorrendben használható. Ha két structured_task_group objektum van deklarálva, a második deklaráltnak (a belsőnek) meg kell semmisülnie, mielőtt bármilyen metódust meghívna, kivéve cancel vagy is_canceling, az elsőn (a külsőn). Ez a feltétel mind abban az esetben érvényes, ha egyszerre több structured_task_group objektumot deklarál ugyanazon vagy funkcionálisan beágyazott hatókörökben, valamint egy olyan feladat esetében, amely a structured_task_group metódusok vagy run metódusok segítségével run_and_wait várólistára került.

  • Az általános task_group osztálytól eltérően az structured_task_group osztály összes állapota végleges. Miután várólistára helyezte a feladatokat a csoporthoz, és megvárta, amíg befejeződnek, nem szabad ugyanazt a csoportot újra használni.

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

Öröklési hierarchia

structured_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 structured_task_group objektumon (bár ez minden bizonnyal alkalmassá teszi a metódust a true visszaadására). Előfordulhat, hogy az structured_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 structured_task_group objektumon, az true is visszaadódik.

bool is_canceling();

Visszaadott érték

Annak jelzése, hogy az structured_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 structured_task_group objektumon. A hívó kezeli a paraméterben átadott objektum élettartamát task_handle_Task_handle . 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<class _Function>
void run(
    task_handle<_Function>& _Task_handle);

template<class _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.

_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 structured_task_group objektum életben maradjon, amíg meg nem hívják rajta a wait vagy run_and_wait metódust.

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

Megjegyzések

A futtatókörnyezet létrehoz egy másolatot a metódusnak átadott feladatfüggvényből. A metódusnak átadott függvényobjektumokban bekövetkező állapotváltozások nem jelennek meg a függvényobjektum másolatában.

Ha a structured_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.

Invalid_multiple_scheduling kivételt eredményez, ha a _Task_handle paraméter által megadott feladatfogantyút már ütemezték egy feladatcsoport-objektumba a run metóduson keresztül, és közben nem hívták meg se a(z) wait se a run_and_wait metódust ezekhez a feladatcsoportokhoz.

futtatás_és_várakozás

Ütemez úgy egy feladatot, hogy az a hívókörnyezetben, beágyazottan fusson, az structured_task_group objektum segítségével a teljes lemondási támogatás érdekében. 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. A függvény ezután megvárja, amíg az structured_task_group objektumon végzett összes munka befejeződött vagy megszakadt.

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 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 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 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 structured_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 structured_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.

A függvény visszatérése után az structured_task_group objektum végső állapotban van, és nem használható. Vegye figyelembe, hogy a run_and_wait metódus visszatérte után történő használat nem meghatározott viselkedést okozhat.

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 structured_task_group destruktora lefutna.

strukturált feladatcsoport

Új structured_task_group objektumot hoz létre.

structured_task_group();

structured_task_group(cancellation_token _CancellationToken);

Paraméterek

_CancellationToken
A strukturált tevékenységcsoporthoz társítható lemondási token. A strukturált tevékenységcsoport megszűnik, amikor a tokent lemondják.

Megjegyzések

A lemondási tokent használó konstruktor létrehoz egy structured_task_group-t, amelyet a tokenhez társított forrás lemondásakor törölnek. Amennyiben explicit lemondási tokent biztosít, elválasztja ezt a strukturált feladatcsoportot attól, hogy részt vegyen egy más tokent használó, vagy token nélküli szülőcsoportból származó implicit törlésben.

~struktúrált_feladatcsoport

Elpusztít egy objektumot structured_task_group . A destruktor végrehajtása előtt meg kell hívnia az objektum wait vagy run_and_wait metódusát, kivéve, ha a destruktor kivétel miatt a verem visszatekerése során fut.

~structured_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 structured_task_group összes munka befejeződik vagy le lett mondva.

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 structured_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 structured_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.

A függvény visszatérése után az structured_task_group objektum végső állapotban van, és nem használható. Vegye figyelembe, hogy a wait metódus visszatérte után történő használat nem meghatározott viselkedést okozhat.

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 structured_task_group destruktora lefutna.

Lásd még

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