Na ovoj stranici

Tasking Namespace

Imeni prostor Tasking obuhvaća sve klase i globalne funkcije rješenja Tasking. Više...

Header: #include <Tasking>

Klase

class CustomTask
class ExecutableItem
class Group
class GroupItem
class Storage
class Sync
class TaskInterface
class TaskTree

Tipovi

enum class CallDone { Never, OnSuccess, OnError, OnCancel, Always }
flags CallDoneFlags
enum class DoneResult { Success, Error }
enum class DoneWith { Success, Error, Cancel }
GroupItems
enum class SetupResult { Continue, StopWithSuccess, StopWithError }
TaskTreeTask
TimeoutTask
enum class WorkflowPolicy { StopOnError, ContinueOnError, StopOnSuccess, ContinueOnSuccess, StopOnSuccessOrError, …, FinishAllAndError }

Varijable

const Tasking::GroupItem continueOnError
const Tasking::GroupItem continueOnSuccess
const Tasking::ExecutableItem errorItem
const Tasking::GroupItem finishAllAndError
const Tasking::GroupItem finishAllAndSuccess
const Tasking::GroupItem nullItem
const Tasking::GroupItem parallel
const Tasking::GroupItem parallelIdealThreadCountLimit
const Tasking::GroupItem sequential
const Tasking::GroupItem stopOnError
const Tasking::GroupItem stopOnSuccess
const Tasking::GroupItem stopOnSuccessOrError
const Tasking::ExecutableItem successItem

Funkcije

Tasking::GroupItem onGroupDone(Handler &&handler, Tasking::CallDoneFlags callDone = CallDone::Always)
Tasking::GroupItem onGroupSetup(Handler &&handler)
Tasking::GroupItem parallelLimit(int limit)
Tasking::ExecutableItem timeoutTask(const std::chrono::milliseconds &timeout, Tasking::DoneResult result = DoneResult::Error)
Tasking::GroupItem workflowPolicy(Tasking::WorkflowPolicy policy)

Detaljan opis

Klase

class CustomTask

Predložak klase koji se koristi za deklariranje prilagođenih stavki zadataka i definiranje njihovih rukovatelja za postavljanje i dovršetak. Više...

class ExecutableItem

Osnovna klasa za izvršne zadatke. Više...

class Group

Group predstavlja osnovni element za sastavljanje deklarativnih recepata koji opisuju kako izvršiti i obraditi ugniježđeno stablo asinkronih zadataka. Više...

class GroupItem

GroupItem predstavlja osnovni element koji može biti dio bilo koje grupe. Više...

class Storage

Klasna šablona za prilagođenu razmjenu podataka u stablu aktivnih zadataka. Više...

class Sync

Sinkrono izvršava prilagođeni rukovatelj između ostalih zadataka. Više...

class TaskInterface

TaskInterface je apstraktna bazna klasa za implementaciju prilagođenih adaptera zadataka. Više...

class TaskTree

Klasa TaskTree pokreće asinkronu strukturu stabla zadataka definiranu deklarativno. Više...

Dokumentacija tipa

enum class Tasking::CallDone
zastavice Tasking::CallDoneFlags

Ovaj enum je neobavezni argument za element onGroupDone() ili konstruktor prilagođenog zadatka. On zadaje stablu zadataka kada bi se trebao pozvati rukovatelj dovršetka grupe ili zadatka.

KonstantaVrijednostOpis
Tasking::CallDone::Never0Handler za završetak se nikada ne poziva.
Tasking::CallDone::OnSuccess1 << 0Obraditelj završetka se poziva samo nakon uspješnog izvršavanja, tj. kada DoneWith::Success.
Tasking::CallDone::OnError1 << 1Handler done se poziva samo nakon neuspješne izvedbe, tj. kada DoneWith::Error.
Tasking::CallDone::OnCancel1 << 2Handler done se poziva samo nakon otkazane izvedbe, tj. kada DoneWith::Cancel.
Tasking::CallDone::AlwaysOnSuccess | OnError | OnCancelHandler za dovršetak se uvijek poziva.

Tip CallDoneFlags je typedef za QFlags<CallDone>. Pohranjuje OR kombinaciju vrijednosti CallDone.

enum class Tasking::DoneResult

Ovaj enum se opcionalno vraća iz funkcije rukovatelja dovršetka grupe ili zadatka. Kada rukovatelj dovršetka ne vrati nikakvu vrijednost, tj. njegov tip povrata je void, njegova konačna vraćena vrijednost automatski se određuje tijekom izvođenja stabla zadataka i prijavljuje roditeljskoj grupi.

Kada handler za dovršetak vrati DoneResult, možete prilagoditi konačnu vrijednost povrata unutar handlera.

Kada grupa vrati DoneResult, zanemaruje se pravilo tijeka rada grupe.

Ovaj enum se također koristi unutar signala TaskInterface::done() i označava je li zadatak završen uspješno ili s greškom.

KonstantaVrijednostOpis
Tasking::DoneResult::Success0Izvršavanje grupe ili zadatka završava uspješno.
Tasking::DoneResult::Error1Izvršavanje grupe ili zadatka završava pogreškom.

enum class Tasking::DoneWith

Ovaj enum je neobavezni argument za rukovatelj događaja završetka grupe ili zadatka. On označava je li grupa ili zadatak završen uspješno ili s greškom, ili je otkazan.

Također se koristi kao argument unutar signala TaskTree::done(), označavajući konačni rezultat izvršavanja TaskTree.

KonstantaVrijednostOpis
Tasking::DoneWith::Success0Izvršenje grupe ili zadatka završilo je uspješno.
Tasking::DoneWith::Error1Izvršavanje grupe ili zadatka završilo je pogreškom.
Tasking::DoneWith::Cancel2Izvršavanje grupe ili zadatka je otkazano. To se događa kada korisnik pozove TaskTree::cancel() za stablo zadataka u tijeku ili kada pravilo tijeka rada grupe rezultira otkazivanjem nekih od njezinih podređenih zadataka u tijeku. Mijenjanje konačnog rezultata rukovatelja dovršenih zadataka vraćanjem Tasking::DoneResult iz rukovatelja je bez učinka kada je izvršavanje grupe ili zadatka otkazano.

[alias] Tasking::GroupItems

Nadimak tipa za QList<GroupItem>.

enum class Tasking::SetupResult

Ovaj enum je opcionalno vraćen iz funkcije za postavljanje grupe ili zadatka. On upućuje stablo aktivnih zadataka kako postupiti nakon završetka izvršavanja funkcije za postavljanje.

KonstantaVrijednostOpis
Tasking::SetupResult::Continue0Zadano. Izvršavanje grupe ili zadatka nastavlja se normalno. Kada handler postavki grupe ili zadatka vrati void, pretpostavlja se da je vratio Continue.
Tasking::SetupResult::StopWithSuccess1Izvršavanje grupe ili zadatka zaustavlja se odmah s uspjehom. Kada se vrati iz pripremne rukovateljske funkcije grupe, svi podređeni zadaci se preskaču i poziva se rukovatelj za uspjeh ( onGroupDone()) grupe s parametrom DoneWith::Success. Grupa izvještava o uspjehu svojeg roditelja. Pravilo tijeka rada grupe se zanemaruje. Kada se vrati iz pripremne rukovateljske funkcije zadatka, zadatak se ne pokreće, njegov rukovatelj za završetak (done handler) se ne poziva i zadatak izvještava o uspjehu svojeg roditelja.
Tasking::SetupResult::StopWithError2onGroupDoneIzvršavanje grupe ili zadatka odmah se prekida s pogreškom. Kada se vrati iz pripremnog rukovatelja grupe, svi podređeni zadaci se preskaču i poziva se rukovatelj za pogreške grupe s parametrima DoneWith::Error. Grupa prijavljuje pogrešku svom roditelju. Pravilo tijeka rada grupe se zanemaruje. Kada se vrati iz pripremnog rukovatelja zadatka, zadatak se ne pokreće, njegov rukovatelj za pogreške se ne poziva i zadatak prijavljuje pogrešku svom roditelju.

[alias] Tasking::TaskTreeTask

Nadimak tipa za CustomTask, koji se koristi unutar recepata i povezan je s zadatkom TaskTree.

[alias] Tasking::TimeoutTask

Nadimak tipa za CustomTask, koji se koristi unutar recepata i povezan je s tipom std::chrono::milliseconds. std::chrono::milliseconds se koristi za postavljanje trajanja timeouta. Zadani timeout je std::chrono::milliseconds::zero(), odnosno TimeoutTask završava čim kontrola vrati u tekući event loop.

Primjer upotrebe:

using namespace std::chrono;
using namespace std::chrono_literals;

const auto onSetup = [](milliseconds &timeout) { timeout = 1000ms; }
const auto onDone = [] { qDebug() << "Timed out."; }

const Group root {
    Timeout(onSetup, onDone)
};

Vidi također timeoutTask.

enum class Tasking::WorkflowPolicy

Ovaj enum opisuje moguće ponašanje elementa Grupe kada se bilo koja podređena zadatak grupe završi izvršavanje. Također se koristi kada se aktivna grupa otkaže.

KonstantaVrijednostOpis
Tasking::WorkflowPolicy::StopOnError0Zadano. Odgovara globalnom elementu stopOnError. Ako se bilo koja podređena zadatka završi s greškom, grupa se zaustavlja i završava s greškom. Ako su se svi podređeni zadaci završili uspješno, grupa završava uspješno. Ako je grupa prazna, završava uspješno.
Tasking::WorkflowPolicy::ContinueOnError1Odgovara globalnom elementu continueOnError. Slično je stopOnError, ali ako se bilo koja podgrupa završi s greškom, izvršavanje se nastavlja dok se sve zadatke ne završe, a grupa potom prijavljuje grešku, čak i kada su se neki drugi zadaci u grupi završili uspješno. Ako se svi zadaci u podgrupi uspješno završe, grupa se završava uspješno. Ako je grupa prazna, završava se uspješno.
Tasking::WorkflowPolicy::StopOnSuccess2Odgovara globalnom elementu stopOnSuccess. Ako se bilo koji podređeni zadatak završi uspješno, grupa se zaustavlja i završava uspješno. Ako su se svi podređeni zadaci završili s greškom, grupa završava s greškom. Ako je grupa prazna, završava s greškom.
Tasking::WorkflowPolicy::ContinueOnSuccess3Odgovara globalnom elementu continueOnSuccess. Slično je stopOnSuccess, ali ako se bilo koja podgrupa uspješno završi, izvršavanje se nastavlja dok se sve zadatke ne dovrše, a grupa potom izvještava o uspjehu, čak i ako su se neki drugi zadaci u grupi završili s pogreškom. Ako se svi podzadaci završe s pogreškom, grupa završava s pogreškom. Ako je grupa prazna, završava s pogreškom.
Tasking::WorkflowPolicy::StopOnSuccessOrError4Odgovara globalnom elementu stopOnSuccessOrError. Grupa pokreće onoliko zadataka koliko može. Kada se bilo koji zadatak završi, grupa se zaustavlja i izvještava o rezultatu tog zadatka. Korisno samo u paralelnom načinu rada. U sekvencijalnom načinu rada pokreće se samo prvi zadatak, a kada se on završi, grupa se također završava, pa se ostali zadaci uvijek preskaču. Ako je grupa prazna, završava s greškom.
Tasking::WorkflowPolicy::FinishAllAndSuccess5Odgovara globalnom elementu finishAllAndSuccess. Grupa izvršava sve zadatke i zanemaruje njihove rezultate. Kada svi zadaci završe, grupa završava uspješno. Ako je grupa prazna, završava uspješno.
Tasking::WorkflowPolicy::FinishAllAndError6Odgovara globalnom elementu finishAllAndError. Grupa izvršava sve zadatke i zanemaruje njihove rezultate povratka. Kada svi zadaci završe, grupa završava s greškom. Ako je grupa prazna, završava s greškom.

Kad god rezultat podređenog zadatka uzrokuje zaustavljanje Grupe, tj. u slučaju politika StopOnError, StopOnSuccess ili StopOnSuccessOrError, Grupa otkazuje ostale aktivne podređene zadatke (ako postoje – na primjer u paralelnom načinu rada) i preskače izvršavanje zadataka koje još nije pokrenula (na primjer, u sekvencijalnom načinu rada – one koji su smješteni nakon neuspjelog zadatka). I otkazivanje i preskakanje podređenih zadataka mogu se dogoditi kada se koristi funkcija parallelLimit()".

Tablica u nastavku sažima razlike između različitih politika tijeka rada:

Politika tijeka radaIzvršava sve podzadatkeRezultatRezultat kada je grupa prazna
Zaustavlja se pri pogrešciZaustavlja se kada bilo koji podređeni zadatak završi s greškom i izvještava o grešciGreška ako je barem jedna podređena zadaća neuspjela, inače uspjehUspjeh
Nastavi pri pogrešciDaGreška kada je barem jedna podređena zadatka zakazala, inače uspjehUspjeh
Zaustavi pri uspjehuZaustavlja se kada se bilo koja pod-naloga uspješno završi i izvještava o uspjehuUspjeh kada je barem jedna pod-naloga uspjela, inače pogreškaGreška
Nastavi pri uspjehuDaUspjeh kada je barem jedna podređena zadatka uspješno završena, inače pogreškaGreška
Zaustavi se pri uspjehu ili pogrešciZaustavlja se kada bilo koja podređena zadatka završi i izvještava o rezultatu podređenog zadatkaUspjeh ili pogreška, ovisno o rezultatu dovršenog podzadaćaGreška
ZavršiSveIUspjehDaUspjehUspjeh
ZavršiSveIGreškaDaGreškaGreška

Ako je podgrupa također grupa, podgrupa izvršava svoje zadatke u skladu sa svojom politikom tijeka rada. Kada roditeljska grupa zaustavi podgrupu koja je u tijeku zbog politike tijeka rada roditeljske grupe, tj. kada je za roditeljsku grupu korištena politika StopOnError, StopOnSuccess ili StopOnSuccessOrError, rezultat podgrupe izvještava se prema stupcu Rezultat i retku politike tijeka rada podgrupe u gornjoj tablici.

Dokumentacija varijabli

const Tasking::GroupItem Tasking::continueOnError

Element praktične globalne grupe koji opisuje pravilo tijeka rada ContinueOnError.

const Tasking::GroupItem Tasking::continueOnSuccess

Element praktične globalne grupe koji opisuje politiku tijeka rada ContinueOnSuccess.

const Tasking::ExecutableItem Tasking::errorItem

Praktični globalni izvršni element koji sadrži prazan, pogrešan, sinkroni zadatak.

Ovo je korisno u if-izrazima za označavanje da se grananje završava pogreškom:

const ExecutableItem conditionalTask = ...;

Group group {
    stopOnError,
    If (conditionalTask) >> Then {
        ...
    } >> Else {
        errorItem
    },
    nextTask
};

U gornjem primjeru, ako se conditionalTask završi pogreškom, odabire se grana Else, koja odmah završava pogreškom. To uzrokuje da se nextTask preskoči (zbog pravila tijeka rada stopOnError u group) i group završava pogreškom.

Vidi također successItem.

const Tasking::GroupItem Tasking::finishAllAndError

Element praktične globalne grupe koji opisuje politiku tijeka rada FinishAllAndError.

const Tasking::GroupItem Tasking::finishAllAndSuccess

Element praktične globalne grupe koji opisuje pravilo tijeka rada FinishAllAndSuccess.

const Tasking::GroupItem Tasking::nullItem

Element prikladne globalne skupine koji označava no-op stavku.

Ovo je korisno u uvjetnim izrazima za označavanje odsutnosti neobaveznog elementa:

const ExecutableItem task = ...;
const std::optional<ExecutableItem> optionalTask = ...;

Group group {
    task,
    optionalTask ? *optionalTask : nullItem
};

const Tasking::GroupItem Tasking::parallel

Praktični element globalne grupe koji opisuje način paralelne izvedbe.

Svi izravni podzadaći grupe pokreću se nakon pokretanja grupe, bez čekanja da prethodni podzadaći završe. U ovom načinu rada svi podzadaći se izvršavaju istovremeno.

Vidi također sequential i parallelLimit().

const Tasking::GroupItem Tasking::parallelIdealThreadCountLimit

Praktičan element globalne grupe koji opisuje paralelni način izvođenja s ograničenim brojem zadataka koji se izvršavaju istovremeno. Ograničenje je jednako idealnom broju niti, isključujući pozivajuću nit.

Ovo je prečac do:

parallelLimit(qMax(QThread::idealThreadCount() - 1, 1))

Vidi također parallel i parallelLimit().

const Tasking::GroupItem Tasking::sequential

Praktičan globalni element grupe koji opisuje sekvencijalni način izvršavanja.

Ovo je zadani način izvršavanja elementa Grupe.

Kada grupa nema način izvršavanja, radi u sekvencijalnom načinu. Svi izravni podređeni zadaci grupe pokreću se u nizu, tako da kada jedan zadatak završi, sljedeći započinje. To vam omogućuje prosljeđivanje rezultata prethodnog zadatka kao ulaz sljedećem zadatku prije nego što on započne. Ovaj način jamči da sljedeći zadatak započinje tek nakon što prethodni zadatak završi.

Vidi također parallel i parallelLimit().

const Tasking::GroupItem Tasking::stopOnError

Praktični element globalne grupe koji opisuje politiku tijeka rada StopOnError.

Ovo je zadana politika tijeka rada elementa Grupe.

const Tasking::GroupItem Tasking::stopOnSuccess

Element praktične globalne grupe koji opisuje politiku tijeka rada StopOnSuccess.

const Tasking::GroupItem Tasking::stopOnSuccessOrError

Element praktične globalne grupe koji opisuje politiku tijeka rada StopOnSuccessOrError.

const Tasking::ExecutableItem Tasking::successItem

Praktičan globalni izvršni element koji sadrži prazan, uspješan, sinkroni zadatak.

Ovo je korisno u if-izrazima za označavanje da se grananje završava uspješno:

const ExecutableItem conditionalTask = ...;

Group group {
    stopOnDone,
    If (conditionalTask) >> Then {
        ...
    } >> Else {
        successItem
    },
    nextTask
};

U gornjem primjeru, ako se conditionalTask završi s greškom, bira se grančica Else, koja odmah završava uspješno. To uzrokuje da se nextTask preskoči (zbog pravila tijeka rada stopOnDone u group) i group završava uspješno.

Vidi također errorItem.

Dokumentacija funkcije

template <typename Handler> Tasking::GroupItem Tasking::onGroupDone(Handler &&handler, Tasking::CallDoneFlags callDone = CallDone::Always)

Konstruira element grupe koji sadrži rukovatelj za završetak grupe. Po zadanome se handler poziva kad god grupa završi. Proslijedite vrijednost koja nije zadana za argument callDone kad želite da se rukovatelj pozove samo pri uspješnom, neuspješnom ili otkazanom izvršavanju. Ovisno o pravilima tijeka rada grupe, ovaj se rukovatelj može pozvati i kad se izvršavanje tekuće grupe otkaže (npr. kad je korišten element stopOnError ).

Proslijeđeni handler je tipa std::function<DoneResult(DoneWith)>. Po želji se može izostaviti svaki od tipova povrata DoneResult ili argumenta DoneWith (tj. njegov tip povrata može biti void). Za više informacija o mogućem tipu handler-a pogledajte GroupItem::GroupDoneHandler.

Kada se pozove handler, sva djeca zadataka grupe već su dovršena.

Ako grupa sadrži elemente pohrane, handler se poziva prije nego što se te pohrane unište, tako da handler i dalje može izvršiti posljednje čitanje podataka aktivnih pohrana.

Vidi također GroupItem::GroupDoneHandler i onGroupSetup().

template <typename Handler> Tasking::GroupItem Tasking::onGroupSetup(Handler &&handler)

Konstruira element grupe koji sadrži upravljač za postavljanje grupe. handler se poziva svaki put kad grupa započne.

Proslijeđeni handler je tipa std::function<SetupResult()> ili std::function<void()>. Za više informacija o mogućim tipovima ručara pogledajte GroupItem::GroupSetupHandler.

Kada se pozove handler, nijedan od podređenih zadataka grupe još nije pokrenut.

Ako grupa sadrži elemente pohrane, handler se poziva nakon što su pohrane izgrađene, tako da handler već može izvršiti neke početne izmjene na aktivnim pohranama.

Vidi također GroupItem::GroupSetupHandler i onGroupDone().

Tasking::GroupItem Tasking::parallelLimit(int limit)

Konstruira element grupe koji opisuje execution mode.

Element načina izvršavanja u grupi određuje kako se pokreću izravni podređeni zadaci grupe.

Radi praktičnosti, kada je to prikladno, umjesto toga se mogu koristiti globalni elementi sequential ili parallel.

limit definira maksimalan broj izravnih podzadataka koji se izvršavaju paralelno:

  • Kada je limit jednak 0, nema ograničenja i svi izravni podzadaci pokreću se zajedno, u redu u kojem se pojavljuju u grupi. To znači potpuno paralelno izvršavanje i umjesto toga se može koristiti element parallel.
  • Kada je limit jednak 1, to znači da u isto vrijeme može raditi samo jedna pod-naloga. To znači sekvencijalno izvršavanje, a umjesto toga može se koristiti element sequential. U tom slučaju pod-nalozi rade u nizu, tako da sljedeća pod-naloga započinje nakon što je prethodna završila.
  • Kada se kao limit proslijedi neka druga pozitivna brojka, dječje zadatke grupe pokreće se paralelno, ali s ograničenim brojem zadataka koji se istovremeno izvršavaju. Ograničenje definira maksimalan broj zadataka koji se paralelno izvršavaju u grupi. Kada se grupa pokrene, pokreće se prva skupina zadataka (broj zadataka u skupini jednak je proslijeđenom limit-u, najviše), dok se ostali drže u čekanju. Kada se bilo koji zadatak u tijeku završi, grupa pokreće sljedeći preostali zadatak, tako da se ne prekorači ograničenje istovremeno pokrenutih zadataka unutar grupe. Taj se postupak ponavlja nakon završetka svakog podzadatka sve dok se svi podzadatci ne pokrenu. To vam omogućuje ograničavanje maksimalnog broja zadataka koji se izvršavaju istovremeno, na primjer ako bi pokretanje previše procesa moglo dugo blokirati računalo.

U svim načinima izvršavanja, grupa pokreće zadatke redom u kojem se pojavljuju.

Ako je podgrupa također grupa, podgrupa izvršava svoje zadatke prema vlastitom načinu izvršavanja.

Vidi također sequential i parallel.

Tasking::ExecutableItem Tasking::timeoutTask(const std::chrono::milliseconds &timeout, Tasking::DoneResult result = DoneResult::Error)

Vraća ExecutableItem tipa TimeoutTask, inicijalno postavljeno pomoću timeout. Vraćeni zadatak, kada je dovršen, izvještava result.

Vidi također TimeoutTask.

Tasking::GroupItem Tasking::workflowPolicy(Tasking::WorkflowPolicy policy)

Konstruira element grupe workflow policy za zadani policy.

Radi praktičnosti, umjesto toga se mogu koristiti globalni elementi.

Vidi također stopOnError, continueOnError, stopOnSuccess, continueOnSuccess, stopOnSuccessOrError, finishAllAndSuccess, finishAllAndError i WorkflowPolicy.

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.