Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A task_group classe representa um conjunto de trabalhos paralelos que podem ser aguardados ou cancelados.
Sintaxe
class task_group;
Membros
Construtores Públicos
| Nome | Description |
|---|---|
| task_group | Sobrecarregado. Constrói um novo task_group objeto. |
| ~task_group Destructor | Destrói um task_group objeto. Espera-se que chame o método wait ou run_and_wait no objeto antes de o destruidor executar, a menos que o destruidor esteja a executar como resultado do desempilhamento devido a uma exceção. |
Métodos Públicos
| Nome | Description |
|---|---|
| cancelar | Faz um esforço para cancelar a subárvore de trabalho enraizada neste grupo de tarefas. Cada tarefa agendada no grupo de tarefas será cancelada de forma transitiva, se possível. |
| is_canceling | Informa o interlocutor se o grupo de tarefa está ou não em processo de cancelamento. Isto não indica necessariamente que o cancel método tenha sido chamado ao task_group objeto (embora isso certamente qualifique este método para devolver true). Pode acontecer que o task_group objeto esteja a executar em linha direta e um grupo de tarefas mais adiante na árvore de trabalho tenha sido cancelado. Em casos como estes, em que o tempo de execução pode determinar antecipadamente que o cancelamento fluirá através deste task_group objeto, true também será devolvido. |
| executar | Sobrecarregado. Agenda uma tarefa no task_group objeto. Se um task_handle objeto for passado como parâmetro para run, o chamador é responsável por gerir a vida útil do task_handle objeto. A versão do método que recebe uma referência a um objeto de função como parâmetro envolve a alocação de heap no tempo de execução, que pode apresentar um desempenho inferior à versão que recebe uma referência a um objeto task_handle. A versão que utiliza o parâmetro _Placement faz com que a tarefa seja enviesada para a execução no local especificado por esse parâmetro. |
| run_and_wait | Sobrecarregado. Agenda uma tarefa para ser executada em linha no contexto de chamada com a ajuda do task_group objeto para suporte total de cancelamento. A função espera então até que todo o trabalho no task_group objeto seja concluído ou cancelado. Se um task_handle objeto for passado como parâmetro para run_and_wait, o chamador é responsável por gerir a vida útil do task_handle objeto. |
| aguarde | Espera até que todo o trabalho no objeto task_group esteja concluído ou cancelado. |
Observações
Ao contrário da classe fortemente restrita structured_task_group , a task_group classe é uma construção muito mais geral. Não tem nenhuma das restrições descritas por structured_task_group.
task_group Os objetos podem ser usados em segurança entre threads e utilizados de forma livre. A desvantagem do task_group constructo é que pode não ter um desempenho tão bom quanto o structured_task_group constructo para tarefas que envolvem pequenas quantidades de trabalho.
Para obter mais informações, consulte paralelismo de tarefas.
Hierarquia de herança
task_group
Requerimentos
Cabeçalho: ppl.h
Namespace: simultaneidade
cancel
Faz um esforço para cancelar a subárvore de trabalho enraizada neste grupo de tarefas. Cada tarefa agendada no grupo de tarefas será cancelada de forma transitiva, se possível.
void cancel();
Observações
Para obter mais informações, consulte Cancelamento.
está_cancelando
Informa o interlocutor se o grupo de tarefa está ou não em processo de cancelamento. Isto não indica necessariamente que o cancel método tenha sido chamado ao task_group objeto (embora isso certamente qualifique este método para devolver true). Pode acontecer que o task_group objeto esteja a executar em linha direta e um grupo de tarefas mais adiante na árvore de trabalho tenha sido cancelado. Em casos como estes, em que o tempo de execução pode determinar antecipadamente que o cancelamento fluirá através deste task_group objeto, true também será devolvido.
bool is_canceling();
Valor de retorno
Uma indicação sobre se o task_group objeto está em processo de cancelamento (ou se é garantido que estará em breve).
Observações
Para obter mais informações, consulte Cancelamento.
execução
Agenda uma tarefa no task_group objeto. Se um task_handle objeto for passado como parâmetro para run, o chamador é responsável por gerir a vida útil do task_handle objeto. A versão do método que usa uma referência para um objeto de função como parâmetro envolve a alocação de heap durante o tempo de execução, o que pode resultar num desempenho inferior ao uso da versão que faz referência a um objeto task_handle. A versão que utiliza o parâmetro _Placement faz com que a tarefa seja enviesada para a execução no local especificado por esse parâmetro.
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
);
Parâmetros
_Function
O tipo do objeto de função que será chamado para executar o corpo do processo da tarefa.
_Func
Uma função que será chamada para executar o corpo da tarefa. Isto pode ser uma expressão lambda ou outro objeto que suporta uma versão do operador de chamada de função com a assinatura void operator()().
_Posicionamento
Uma referência ao local onde a tarefa representada pelo _Func parâmetro deve ser executada.
_Task_handle
Um controlo para o trabalho a ser agendado. Note-se que o chamador é responsável pela vida útil deste objeto. O tempo de execução continuará a esperar que exista até que o método wait ou run_and_wait seja chamado no objeto task_group.
Observações
O sistema de execução agenda a função de trabalho fornecida para execução em um momento posterior, o que pode ocorrer depois que a função chamadora retorna. Este método utiliza um objeto task_handle para armazenar uma cópia da função de trabalho fornecida. Portanto, quaisquer alterações de estado que ocorram num objeto função que passes para este método não aparecerão na tua cópia desse objeto de função. Além disso, certifique-se de que a vida útil de quaisquer objetos que passe por ponteiro ou por referência à função de trabalho permanece válida até que a função de trabalho regresse.
Se o método task_group se autodestrói como resultado do desenrolamento da pilha a partir de uma exceção, não precisa de garantir que foi feita uma chamada para os métodos wait ou run_and_wait. Neste caso, o destruidor irá apropriadamente cancelar e esperar que a tarefa representada pelo _Task_handle parâmetro seja concluída.
O método lança uma exceção de invalid_multiple_scheduling se o handle de tarefa dado através do parâmetro _Task_handle já tiver sido agendado para um objeto do grupo de tarefas através do método run e não tiver havido nenhuma chamada intermédia para o método wait ou run_and_wait nesse grupo de tarefas.
executar_e_esperar
Agenda uma tarefa para ser executada em linha no contexto de chamada com a ajuda do task_group objeto para suporte total de cancelamento. A função espera então até que todo o trabalho no task_group objeto seja concluído ou cancelado. Se um task_handle objeto for passado como parâmetro para run_and_wait, o chamador é responsável por gerir a vida útil do task_handle objeto.
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
);
Parâmetros
_Function
O tipo do objeto função que será invocado para executar o corpo da tarefa.
_Task_handle
Um handle para a tarefa que será executado diretamente no contexto de invocação. Note-se que o chamador é responsável pela vida útil deste objeto. O tempo de execução continuará a esperar que dure até o run_and_wait método terminar a execução.
_Func
Uma função que será chamada para invocar o corpo da obra. Isto pode ser uma expressão lambda ou outro objeto que suporta uma versão do operador de chamada de função com a assinatura void operator()().
Valor de retorno
Uma indicação de se a espera foi cumprida ou se o grupo de tarefas foi cancelado, devido a uma operação explícita de cancelamento ou a uma exceção lançada por uma das suas tarefas. Para mais informações, consulte task_group_status.
Observações
Note que uma ou mais das tarefas agendadas para este task_group objeto podem ser executadas inline no contexto de chamada.
Se uma ou mais das tarefas agendadas para este task_group objeto lançarem uma exceção, o runtime selecionará uma dessas exceções à sua escolha e propagará essa exceção para fora da chamada para o run_and_wait método.
Ao regressar do run_and_wait método a um task_group objeto, o runtime reinicia o objeto para um estado limpo onde pode ser reutilizado. Isto inclui o caso em que o task_group objeto foi cancelado.
No caminho de execução não excecional, tens a obrigação de chamar este método ou o método wait antes de o destruidor de task_group ser executado.
grupo_de_tarefas
Constrói um novo task_group objeto.
task_group();
task_group(
cancellation_token _CancellationToken
);
Parâmetros
_CancellationToken
Um token de cancelamento para associar a este grupo de tarefas. O grupo de tarefas será cancelado quando o token for cancelado.
Observações
O construtor que recebe um token de cancelamento cria um task_group que será cancelado quando a fonte associada ao token for cancelada. Fornecer um token de cancelamento explícito também isola este grupo de tarefas de participar num cancelamento implícito de um grupo principal, quer tenha um token diferente ou não tenha token.
~task_group
Destrói um task_group objeto. Espera-se que chame o método wait ou run_and_wait no objeto antes de o destruidor executar, a menos que o destruidor esteja a executar como resultado do desempilhamento devido a uma exceção.
~task_group();
Observações
Se o destruidor for executado como resultado da execução normal (por exemplo, não do desenrolamento da pilha devido a uma exceção) e nem o método wait nem run_and_wait tiverem sido chamados, o destruidor pode lançar uma exceção missing_wait .
wait
Espera até que todo o trabalho no objeto task_group esteja concluído ou cancelado.
task_group_status wait();
Valor de retorno
Uma indicação de se a espera foi cumprida ou se o grupo de tarefas foi cancelado, devido a uma operação explícita de cancelamento ou a uma exceção lançada por uma das suas tarefas. Para mais informações, consulte task_group_status.
Observações
Note que uma ou mais das tarefas agendadas para este task_group objeto podem ser executadas inline no contexto de chamada.
Se uma ou mais das tarefas agendadas para este task_group objeto lançarem uma exceção, o runtime selecionará uma dessas exceções à sua escolha e propagará essa exceção para fora da chamada para o wait método.
Chamar wait num objeto task_group define-o para um estado inicial limpo em que pode ser reutilizado. Isto inclui o caso em que o task_group objeto foi cancelado.
No caminho de execução não excecional, tens a obrigação de chamar este método ou o método run_and_wait antes de o destruidor de task_group ser executado.
Consulte também
concorrência Namespace
structured_task_group Classe
task_handle Classe