Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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_groupnem használhat több szál. Az objektumon végzettstructured_task_groupösszes műveletet az objektumot létrehozó szálnak kell végrehajtania. A szabály két kivétele acancelésis_cancelingtagfü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_groupobjektumhoz ütemezett feladat ütemezésetask_handleobjektumok 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_groupobjektum van deklarálva, a második deklaráltnak (a belsőnek) meg kell semmisülnie, mielőtt bármilyen metódust meghívna, kivévecancelvagyis_canceling, az elsőn (a külsőn). Ez a feltétel mind abban az esetben érvényes, ha egyszerre többstructured_task_groupobjektumot deklarál ugyanazon vagy funkcionálisan beágyazott hatókörökben, valamint egy olyan feladat esetében, amely astructured_task_groupmetódusok vagyrunmetódusok segítségévelrun_and_waitvárólistára került.Az általános
task_grouposztálytól eltérően azstructured_task_grouposztá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.