Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här dokumentet beskriver rollen för scheduler-instanser i concurrency Runtime och hur du använder samtidighet::Scheduler och samtidighet::CurrentScheduler-klasser för att skapa och hantera scheduler-instanser. Scheduler-instanser är användbara när du vill associera explicita schemaläggningsprinciper med specifika typer av arbetsbelastningar. Du kan till exempel skapa en scheduler-instans för att köra vissa uppgifter med en förhöjd trådprioritet och använda standardschemaläggaren för att köra andra uppgifter med normal trådprioritet.
Tips/Råd
Concurrency Runtime tillhandahåller en standardschemaläggare och därför behöver du inte skapa en i ditt program. Eftersom Schemaläggaren hjälper dig att finjustera prestanda för dina program rekommenderar vi att du börjar med PPL (Parallel Patterns Library) eller Asynchronous Agents Library om du är nybörjare på Concurrency Runtime.
Sektioner
Klasserna Scheduler och CurrentScheduler
Med Schemaläggaren kan program använda en eller flera schemaläggarinstanser för att schemalägga arbete. Klassen concurrency::Scheduler representerar en scheduler-instans och kapslar in de funktioner som är relaterade till schemaläggningsuppgifter.
En tråd som är kopplad till en schemaläggare kallas för en körningskontext, eller bara kontext. En schemaläggare kan vara aktiv i den aktuella kontexten när som helst. Den aktiva schemaläggaren kallas även för den aktuella schemaläggaren. Concurrency Runtime använder klassen concurrency::CurrentScheduler för att ge åtkomst till den aktuella schemaläggaren. Den aktuella schemaläggaren för en kontext kan skilja sig från den aktuella schemaläggaren för en annan kontext. Körtiden ger ingen representation av den aktuella schemaläggaren på processnivå.
Vanligtvis används den CurrentScheduler klassen för att komma åt den aktuella schemaläggaren. Klassen Scheduler är användbar när du behöver hantera en schemaläggare som inte är den aktuella.
I följande avsnitt beskrivs hur du skapar och hanterar en scheduler-instans. Ett fullständigt exempel som illustrerar dessa uppgifter finns i Så här hanterar du en Scheduler-instans.
[Topp]
Skapa en Scheduler-instans
Det finns tre sätt att skapa ett Scheduler objekt:
- Om det inte finns någon schemaläggare skapar körmiljön en standardschemaläggare för dig när du använder körmiljöns funktionalitet, till exempel en parallell algoritm, för att utföra uppgifter. Standardschemaläggaren blir den aktuella schemaläggaren för kontexten som initierar det parallella arbetet. 
- Metoden concurrency::CurrentScheduler::Create skapar ett - Schedulerobjekt som använder en specifik princip och associerar schemaläggaren med den aktuella kontexten.
- Metoden concurrency::Scheduler::Create skapar ett - Schedulerobjekt som använder en specifik princip, men som inte associerar den med den aktuella kontexten.
Om man tillåter att programkörningen skapar en standardschemaläggare kan alla samtidiga uppgifter dela samma schemaläggare. Vanligtvis används de funktioner som tillhandahålls av PPL ( Parallel Patterns Library ) eller Asynchronous Agents Library för att utföra parallellt arbete. Därför behöver du inte arbeta direkt med schemaläggaren för att styra dess princip eller livslängd. När du använder PPL eller agentbiblioteket skapar körningen standardschemaläggaren om den inte finns och gör den till aktuell schemaläggare för varje kontext. När du skapar en schemaläggare och ställer in den som den aktuella schemaläggaren, använder körmiljön denna schemaläggare för att planera uppgifter. Skapa endast ytterligare scheduler-instanser när du behöver en specifik schemaläggningsprincip. Mer information om de principer som är associerade med en schemaläggare finns i Scheduler-principer.
[Topp]
Hantera livslängden för en Scheduler-instans
Körningen använder en referensräkningsmekanism för att styra objektens Scheduler livslängd.
När du använder metoden CurrentScheduler::Create eller metoden Scheduler::Create för att skapa ett objekt av typen Scheduler anger körningstiden det initiala referensantalet för schemaläggaren till ett. Körtidssystemet ökar referensantalet när du anropar metoden concurrency::Scheduler::Attach. Metoden Scheduler::Attach associerar Scheduler objektet med den aktuella kontexten. Detta gör den till aktuell schemaläggare. När du anropar CurrentScheduler::Create metoden skapar körningen både ett Scheduler objekt och kopplar det till den aktuella kontexten (och anger referensantalet till ett). Du kan också använda metoden concurrency::Scheduler::Reference för att öka referensantalet för ett Scheduler objekt.
Körningen minskar referensantalet när du anropar metoden concurrency::CurrentScheduler::Detach för att koppla från den aktuella schemaläggaren eller concurrency::Scheduler::Release. När referensantalet når noll, förstörs Scheduler-objektet av körningen efter att alla schemalagda aktiviteter har slutförts. En aktivitet som körs kan öka referensantalet för den aktuella schemaläggaren. Om referensantalet därför når noll och en aktivitet ökar referensantalet förstör Scheduler körningen inte objektet förrän referensantalet når noll igen och alla aktiviteter har slutförts.
Programkörningen underhåller en intern stack med Scheduler objekt för varje enskild kontext. När du anropar Scheduler::Attach metoden eller CurrentScheduler::Create skickar körningen objektet Scheduler till stacken för den aktuella kontexten. Detta gör den till aktuell schemaläggare. När du anropar CurrentScheduler::Detach, tar körningen bort den aktuella schemaläggaren från stacken och ställer in den tidigare som den nuvarande schemaläggaren i den aktuella kontexten.
Körmiljön erbjuder flera sätt att hantera livslängden för en scheduler-instans. I följande tabell visas den lämpliga metoden som frigör eller lösgör schemaläggaren från den aktuella kontexten, för varje metod som skapar eller binder en schemaläggare till den aktuella kontexten.
| Skapa eller koppla metod | Frisläpp eller koppla från metod | 
|---|---|
| CurrentScheduler::Create | CurrentScheduler::Detach | 
| Scheduler::Create | Scheduler::Release | 
| Scheduler::Attach | CurrentScheduler::Detach | 
| Scheduler::Reference | Scheduler::Release | 
Om du anropar en olämplig frigörings- eller frånkopplingsmetod kan det orsaka ospecificerat beteende i körmiljön.
När du använder funktionalitet, till exempel PPL, som gör att körtiden skapar standardschemaläggaren för dig, ska du inte frisläppa eller koppla från den här schemaläggaren. Körmiljön hanterar livslängden för alla schemaläggare den skapar.
Eftersom körningen inte förstör ett Scheduler-objekt innan alla aktiviteter har avslutats, kan du använda metoderna concurrency::Scheduler::RegisterShutdownEvent eller concurrency::CurrentScheduler::RegisterShutdownEvent för att få ett meddelande när ett Scheduler-objekt förstörs. Detta är användbart när du måste vänta tills varje uppgift som schemalagts av ett Scheduler objekt ska slutföras.
[Topp]
Metoder och funktioner
I det här avsnittet sammanfattas de viktiga metoderna för klasserna CurrentScheduler och Scheduler .
Tänk på CurrentScheduler klassen som en hjälp för att skapa en schemaläggare för användning i den aktuella kontexten. Med Scheduler klassen kan du styra en schemaläggare som tillhör en annan kontext.
I följande tabell visas de viktiga metoder som definieras av CurrentScheduler klassen.
| Metod | Beskrivning | 
|---|---|
| Skapa | Skapar ett Schedulerobjekt som använder den angivna principen och associerar den med den aktuella kontexten. | 
| Hämta | Hämtar en pekare till objektet Schedulersom är associerat med den aktuella kontexten. Den här metoden ökar inte referensantalet förSchedulerobjektet. | 
| Koppla från | Kopplar bort den aktuella schemaläggaren från den aktuella kontexten och anger den tidigare som aktuell schemaläggare. | 
| RegisterShutdownEvent | Registrerar en händelse som körmiljön anger när den aktuella schemaläggaren avslutas. | 
| SkapaSchemagrupp | Skapar ett concurrency::ScheduleGroup-objekt i den aktuella schemaläggaren. | 
| ScheduleTask | Lägger till en lätt uppgift i schemaläggningskön för den aktuella schemaläggaren. | 
| GetPolicy | Hämtar en kopia av policyn som är kopplad till den nuvarande schemaläggaren. | 
I följande tabell visas de viktiga metoder som definieras av Scheduler klassen.
| Metod | Beskrivning | 
|---|---|
| Skapa | Skapar ett Schedulerobjekt som använder den angivna principen. | 
| Bifoga | Associerar Schedulerobjektet med den aktuella kontexten. | 
| Referens | Ökar referensräknaren för Schedulerobjektet. | 
| Släppa | Minskar referensräknaren för Schedulerobjektet. | 
| RegisterShutdownEvent | Registrerar en händelse som initieras av programkörningen när Scheduler-objektet förstörs. | 
| SkapaSchemagrupp | Skapar ett samtidighetsobjekt::ScheduleGroup-objekt i objektet Scheduler. | 
| ScheduleTask | Schemalägger en lätt uppgift från objektet Scheduler. | 
| GetPolicy | Hämtar en kopia av policyn som är associerad med Schedulerobjektet. | 
| SetDefaultSchedulerPolicy | Ställer in policyn för körtiden att använda när den skapar standardschemaläggaren. | 
| ÅterställStandardSchemaläggningspolicy | Återställer standardpolicyn till den som var aktiv innan anropet till SetDefaultSchedulerPolicy. Om standardschemaläggaren skapas efter det här anropet använder körningen standardprincipinställningar för att skapa schemaläggaren. | 
[Topp]
Exempel
Grundläggande exempel på hur du skapar och hanterar en scheduler-instans finns i Så här hanterar du en Scheduler-instans.
Se även
              Aktivitetsschemaläggare
              Anvisningar: Hantera en schemaläggarinstans
              Schemaläggarprinciper
              Schemalägg grupper