task_group — Klasa
Klasa task_group
reprezentuje kolekcję równoległych prac, które można czekać lub anulować.
Składnia
class task_group;
Elementy członkowskie
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 run obiektu , 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_wait obiektu , 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 run
obiektu , 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_wait
obiektu , 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 wait
run_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