task_group — Klasa

Klasa task_group reprezentuje kolekcję równoległych prac, które można czekać lub anulować.

Składnia

class task_group;

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
Task_group Przeciążone. Tworzy nowy task_group obiekt.
~task_group Destruktor task_group Niszczy obiekt. Przed wykonaniem destruktora należy wywołać wait metodę lub run_and_wait obiektu przed wykonaniem destruktora, chyba że destruktor jest wykonywany w wyniku odwijania stosu z powodu wyjątku.

Metody publiczne

Nazwa/nazwisko opis
Anuluj Podejmuje najlepszą próbę anulowania podzadrzewa pracy zakorzenionej w tej grupie zadań. Każde zadanie zaplanowane w grupie zadań zostanie anulowane przechodnio, jeśli jest to możliwe.
is_canceling Informuje obiekt wywołujący, czy grupa zadań znajduje się obecnie w trakcie anulowania. Niekoniecznie oznacza to, że cancel metoda została wywołana w task_group obiekcie (chociaż z pewnością kwalifikuje tę metodę do zwrócenia true). Może się zdarzyć, że task_group obiekt jest wykonywany w tekście, a grupa zadań dalej w drzewie roboczym została anulowana. W takich przypadkach, w których środowisko uruchomieniowe może określić przed upływem czasu, że anulowanie będzie przepływać przez ten task_group obiekt, true zostanie również zwrócone.
uruchom Przeciążone. Planuje zadanie w task_group obiekcie . task_handle Jeśli obiekt jest przekazywany jako parametr do runobiektu , obiekt wywołujący jest odpowiedzialny za zarządzanie okresem istnienia task_handle obiektu. Wersja metody, która przyjmuje odwołanie do obiektu funkcji jako parametr obejmuje alokację sterty wewnątrz środowiska uruchomieniowego, które mogą być wykonywane mniej dobrze niż w przypadku korzystania z wersji, która przyjmuje odwołanie do task_handle obiektu. Wersja, która przyjmuje parametr _Placement powoduje, że zadanie jest stronnicze w kierunku wykonywania w lokalizacji określonej przez ten parametr.
Run_and_wait Przeciążone. Planuje uruchomienie zadania wbudowanego w kontekście wywołującym z pomocą obiektu w celu zapewnienia pełnej task_group obsługi anulowania. Następnie funkcja czeka, aż wszystkie prace nad task_group obiektem zostaną ukończone lub anulowane. task_handle Jeśli obiekt jest przekazywany jako parametr do run_and_waitobiektu , obiekt wywołujący jest odpowiedzialny za zarządzanie okresem istnienia task_handle obiektu.
Czekać Czeka, aż wszystkie prace nad obiektem task_group zostaną ukończone lub anulowane.

Uwagi

W przeciwieństwie do silnie ograniczonej structured_task_group klasy, task_group klasa jest znacznie bardziej ogólną konstrukcją. Nie ma żadnych ograniczeń opisanych przez structured_task_group. task_group obiekty mogą być bezpiecznie używane w wątkach i wykorzystywane w dowolny sposób. Wadą task_group konstrukcji jest to, że może nie wykonywać, jak również structured_task_group konstrukcji pod kątem zadań, które wykonują niewielkie ilości pracy.

Aby uzyskać więcej informacji, zobacz Równoległość zadań.

Hierarchia dziedziczenia

task_group

Wymagania

Nagłówek: ppl.h

Przestrzeń nazw: współbieżność

Anuluj

Podejmuje najlepszą próbę anulowania podzadrzewa pracy zakorzenionej w tej grupie zadań. Każde zadanie zaplanowane w grupie zadań zostanie anulowane przechodnio, jeśli jest to możliwe.

void cancel();

Uwagi

Aby uzyskać więcej informacji, zobacz Anulowanie.

is_canceling

Informuje obiekt wywołujący, czy grupa zadań znajduje się obecnie w trakcie anulowania. Niekoniecznie oznacza to, że cancel metoda została wywołana w task_group obiekcie (chociaż z pewnością kwalifikuje tę metodę do zwrócenia true). Może się zdarzyć, że task_group obiekt jest wykonywany w tekście, a grupa zadań dalej w drzewie roboczym została anulowana. W takich przypadkach, w których środowisko uruchomieniowe może określić przed upływem czasu, że anulowanie będzie przepływać przez ten task_group obiekt, true zostanie również zwrócone.

bool is_canceling();

Wartość zwracana

Wskazanie, czy task_group obiekt znajduje się w trakcie anulowania (lub jest gwarantowany wkrótce).

Uwagi

Aby uzyskać więcej informacji, zobacz Anulowanie.

uruchom

Planuje zadanie w task_group obiekcie . task_handle Jeśli obiekt jest przekazywany jako parametr do runobiektu , obiekt wywołujący jest odpowiedzialny za zarządzanie okresem istnienia task_handle obiektu. Wersja metody, która przyjmuje odwołanie do obiektu funkcji jako parametr obejmuje alokację sterty wewnątrz środowiska uruchomieniowego, które mogą być wykonywane mniej dobrze niż w przypadku korzystania z wersji, która przyjmuje odwołanie do task_handle obiektu. Wersja, która przyjmuje parametr _Placement powoduje, że zadanie jest stronnicze w kierunku wykonywania w lokalizacji określonej przez ten parametr.

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
);

Parametry

_Funkcja
Typ obiektu funkcji, który zostanie wywołany w celu wykonania treści dojścia zadania.

_Func
Funkcja, która zostanie wywołana w celu wywołania treści zadania. Może to być wyrażenie lambda lub inny obiekt, który obsługuje wersję operatora wywołania funkcji z podpisem void operator()().

_Umieszczenie
Odwołanie do lokalizacji, w której zadanie reprezentowane przez _Func parametr powinien zostać wykonany.

_Task_handle
Dojście do zaplanowanej pracy. Należy pamiętać, że obiekt wywołujący ponosi odpowiedzialność za okres istnienia tego obiektu. Środowisko uruchomieniowe będzie nadal oczekiwać, że będzie działać do momentu wait wywołania metody lub run_and_wait dla tego task_group obiektu.

Uwagi

Środowisko uruchomieniowe planuje uruchomienie udostępnionej funkcji pracy w późniejszym czasie, co może być możliwe po powrocie funkcji wywołującej. Ta metoda używa obiektu task_handle do przechowywania kopii udostępnionej funkcji roboczej. W związku z tym wszelkie zmiany stanu, które występują w obiekcie funkcji przekazanym do tej metody, nie będą wyświetlane w kopii tego obiektu funkcji. Ponadto upewnij się, że okres istnienia wszystkich obiektów przekazywanych przez wskaźnik lub odwołanie do funkcji pracy pozostaje prawidłowe, dopóki funkcja robocza nie zwróci funkcji roboczej.

task_group Jeśli destrukcja w wyniku odwijania stosu z wyjątku, nie musisz zagwarantować, że wywołanie zostało wykonane do wait metody lub run_and_wait . W takim przypadku destruktor odpowiednio anuluje i czeka na ukończenie zadania reprezentowanego _Task_handle przez parametr .

Metoda zgłasza wyjątek invalid_multiple_scheduling , jeśli uchwyt zadania podany przez _Task_handle parametr został już zaplanowany na obiekt grupy zadań za pośrednictwem run metody i nie było pośredniczące wywołanie metody wait lub run_and_wait w tej grupie zadań.

Run_and_wait

Planuje uruchomienie zadania wbudowanego w kontekście wywołującym z pomocą obiektu w celu zapewnienia pełnej task_group obsługi anulowania. Następnie funkcja czeka, aż wszystkie prace nad task_group obiektem zostaną ukończone lub anulowane. task_handle Jeśli obiekt jest przekazywany jako parametr do run_and_waitobiektu , obiekt wywołujący jest odpowiedzialny za zarządzanie okresem istnienia task_handle obiektu.

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
);

Parametry

_Funkcja
Typ obiektu funkcji, który zostanie wywołany w celu wykonania treści zadania.

_Task_handle
Dojście do zadania, które zostanie uruchomione w tekście w kontekście wywołującym. Należy pamiętać, że obiekt wywołujący ponosi odpowiedzialność za okres istnienia tego obiektu. Środowisko uruchomieniowe będzie nadal oczekiwać, że będzie działać, dopóki run_and_wait metoda nie zakończy wykonywania.

_Func
Funkcja, która zostanie wywołana w celu wywołania treści pracy. Może to być wyrażenie lambda lub inny obiekt, który obsługuje wersję operatora wywołania funkcji z podpisem void operator()().

Wartość zwracana

Wskazanie, czy oczekiwanie zostało spełnione, czy grupa zadań została anulowana z powodu jawnej operacji anulowania lub wyjątku zgłaszanego z jednego z jego zadań. Aby uzyskać więcej informacji, zobacz task_group_status.

Uwagi

Należy pamiętać, że co najmniej jedno zadanie zaplanowane do tego task_group obiektu może być wykonywane w tekście w kontekście wywołującym.

Jeśli co najmniej jedno zadanie zaplanowane do tego task_group obiektu zgłasza wyjątek, środowisko uruchomieniowe wybierze jeden taki wyjątek od wybranego obiektu i rozpropaguje go z wywołania run_and_wait metody .

Po powrocie z run_and_wait metody w task_group obiekcie środowisko uruchomieniowe resetuje obiekt do stanu czystego, w którym można go ponownie użyć. Obejmuje to przypadek, w task_group którym obiekt został anulowany.

W nietypowej ścieżce wykonywania masz mandat do wywołania tej metody lub wait metody przed destruktorem task_group wykonań.

Task_group

Tworzy nowy task_group obiekt.

task_group();

task_group(
   cancellation_token _CancellationToken
);

Parametry

_Cancellationtoken
Token anulowania do skojarzenia z tą grupą zadań. Grupa zadań zostanie anulowana po anulowaniu tokenu.

Uwagi

Konstruktor, który przyjmuje token anulowania, tworzy task_group obiekt, który zostanie anulowany po anulowaniu źródła skojarzonego z tokenem. Podanie jawnego tokenu anulowania powoduje również odizolowanie tej grupy zadań od udziału w niejawnym anulowaniu z grupy nadrzędnej z innym tokenem lub bez tokenu.

~Task_group

task_group Niszczy obiekt. Przed wykonaniem destruktora należy wywołać wait metodę lub run_and_wait obiektu przed wykonaniem destruktora, chyba że destruktor jest wykonywany w wyniku odwijania stosu z powodu wyjątku.

~task_group();

Uwagi

Jeśli destruktor jest uruchamiany w wyniku normalnego wykonywania (na przykład nie odwijania stosu z powodu wyjątku) ani nie waitrun_and_wait wywołano metod, destruktor może zgłosić wyjątek missing_wait .

wait

Czeka, aż wszystkie prace nad obiektem task_group zostaną ukończone lub anulowane.

task_group_status wait();

Wartość zwracana

Wskazanie, czy oczekiwanie zostało spełnione, czy grupa zadań została anulowana z powodu jawnej operacji anulowania lub wyjątku zgłaszanego z jednego z jego zadań. Aby uzyskać więcej informacji, zobacz task_group_status.

Uwagi

Należy pamiętać, że co najmniej jedno zadanie zaplanowane do tego task_group obiektu może być wykonywane w tekście w kontekście wywołującym.

Jeśli co najmniej jedno zadanie zaplanowane do tego task_group obiektu zgłasza wyjątek, środowisko uruchomieniowe wybierze jeden taki wyjątek od wybranego obiektu i rozpropaguje go z wywołania wait metody .

Wywołanie wait obiektu task_group resetuje go do czystego stanu, w którym można go ponownie użyć. Obejmuje to przypadek, w task_group którym obiekt został anulowany.

W nietypowej ścieżce wykonywania masz mandat do wywołania tej metody lub run_and_wait metody przed destruktorem task_group wykonań.

Zobacz też

Przestrzeń nazw współbieżności
structured_task_group, klasa
task_handle, klasa