X vil ikke starte. Datamaskinen slår seg på, men operativsystemet starter ikke: mulige årsaker og løsninger på problemet. Mortal Kombat X krasjer med feilen "0xc000007b"

Som oftest bakgrunnsjobber i 1C:Bedrifter lanseres fra under forskrifter.

Det vil si at ved oppstart genererer en rutineoppgave en bakgrunnsoppgave. Men om nødvendig
vi kan kjøre en bakgrunnsjobb programmatisk også.
Samtidig kan den bruke alle metoder og egenskaper som er tilgjengelige på serveren, fordi og den kjører på serveren.
Faktisk utfører ikke bakgrunnsjobben i seg selv noen handlinger. Den starter bare
å utføre en prosedyre fra en felles modul. Hvis prosedyren bruker parametere,
de kan også sendes når en bakgrunnsjobb startes.

La oss se på et enkelt eksempel. La oss lage en prosessering som kjører bakgrunnen
oppgave, som igjen vil føre inn i loggboken.

Fordi det
for en bakgrunnsjobb trenger vi en felles modulprosedyre, la oss lage denne felles modulen
med muligheten til å utføre sine prosedyrer på serveren.

La oss lage en prosedyre i denne generelle modulen som vil registrere i loggen
registrering

Prosedyre RecordInRegistrationLog(par_EventName, par_Comment) ExportRecordLog(par_EventName, , , , par_Comment) ; Sluttprosedyre

Som du kan se, har prosedyren parametere. Dette betyr at bakgrunnsoppgaven må gjøre dem på en eller annen måte
måte å overføre til prosedyren.

Nå skal vi lage en prosessering som vi vil starte en bakgrunnsoppgave med.

Vi vil gjøre det på en kontrollert form, men for vanlige former vil det ikke være noen grunnleggende forskjell,
de samme metodene brukes. La oss lage et enkelt skjema med én kommando:


I skjemamodulen skriver vi følgende kode:

&OnServer-prosedyre Skriv JROnServer() Array of Parameters = New Array; En rekke parametere. Legg til( "Hendelse. Bakgrunnsjobb fullført") ; En rekke parametere. Legg til( "Kommentar. Sjekker bakgrunnsjobben") ; Bakgrunnsoppgaver. Løpe ( "site_RoutineTasks.RecordInRegistrationJournal", Array of Parameters) ; Slutt på prosedyre &På klienten Prosedyre Skriv JR (kommando) Skriv JR på server () ; Sluttprosedyre

Start en bakgrunnsjobb ved å bruke metoden Løpe()
bakgrunnsjobbleder.

Den første parameteren til denne metoden er
navnet på fellesmodulen og navnet på prosedyren som skal utføres, skriv inn - string.
Den andre parameteren er en matrise med parameterverdiene for den kalte prosedyren.
Rekkefølgen på elementene i matrisen må samsvare med rekkefølgen på parameterne i
fremgangsmåte.
Kan også være indikert Nøkkel Og Navn bakgrunnsjobb.

La oss nå teste behandlingen. La oss åpne den i 1C:Enterprise-modus og
La oss begynne å utføre. Deretter åpner du registreringsloggen og ser at oppgaven
fungerte vellykket og gjorde en tilsvarende oppføring i loggen.

1 Jobbmekanisme
2 Bakgrunnsjobber
3 Planlagte oppgaver
4 Funksjoner for å utføre bakgrunnsjobber i fil- og klient-serverversjoner
5 Opprette metadata for en rutineoppgave
6 Jobbkonsoll
7 Arbeide med rutineoppgaver
7.1 Jobbobjekter
7.2 Få en liste over oppgaver
7.3 Skapelse
7.4 Avinstallering
7.5 Få et jobbobjekt

Jobbmekanisme

Jobbmotoren er designet for å utføre enhver applikasjon eller funksjonalitet på en tidsplan eller asynkront.

Oppgavemekanismen løser følgende oppgaver:

  • Evne til å definere regulatoriske prosedyrer på systemkonfigurasjonsstadiet;
  • Utførelse av spesifiserte handlinger i henhold til tidsplan;
  • Å ringe en gitt prosedyre eller funksjon asynkront, dvs. uten å vente på at den er ferdig;
  • Spore fremdriften til en spesifikk oppgave og oppnå dens fullføringsstatus (en verdi som indikerer om den var vellykket eller ikke);
  • Innhente en liste over aktuelle oppgaver;
  • Evne til å vente på at en eller flere oppgaver skal fullføres;
  • Jobbledelse (mulighet for kansellering, sperring av utførelse etc.).

Jobbmekanismen består av følgende komponenter:

  • Metadata av rutineoppgaver;
  • Vanlige oppgaver;
  • Bakgrunnsjobber;
  • Oppgaveplanlegger.

Bakgrunnsjobber er designet for å utføre applikasjonsoppgaver asynkront. Bakgrunnsoppgaver implementeres ved hjelp av det innebygde språket.

Planlagte oppgaver - designet for å utføre påførte oppgaver etter en tidsplan. Rutineoppgaver lagres i informasjonsbasen og lages basert på metadata definert i konfigurasjonen. Metadata for en reguleringsoppgave inneholder informasjon som navn, metode, bruk osv.

En rutineoppgave har en tidsplan som bestemmer på hvilke tidspunkter metoden knyttet til rutineoppgaven må utføres. Tidsplanen er som regel spesifisert i informasjonsbasen, men kan også spesifiseres på konfigurasjonsstadiet (for eksempel for forhåndsdefinerte rutineoppgaver).

Oppgaveplanleggeren brukes til å planlegge utførelsen av rutineoppgaver. For hver planlagte jobb sjekker planleggeren med jevne mellomrom om gjeldende dato og klokkeslett samsvarer med tidsplanen for den planlagte jobben. Hvis det stemmer, tilordner planleggeren den oppgaven til utførelse. For å gjøre dette, for denne planlagte oppgaven, oppretter planleggeren en bakgrunnsoppgave, som utfører selve behandlingen.

Bakgrunnsjobber

Bakgrunnsjobber er praktiske å bruke for å utføre komplekse beregninger når resultatet av beregningen kan ta lang tid å få. Jobbmotoren har midler til å utføre slike beregninger asynkront.

Tilknyttet en bakgrunnsjobb er en metode som kalles når bakgrunnsjobben kjører. En bakgrunnsjobbmetode kan være en hvilken som helst prosedyre eller funksjon av en ikke-global felles modul som kan kalles på serveren. Bakgrunnsjobbparametere kan være alle verdier som tillates sendt til serveren. Parametrene til en bakgrunnsjobb må samsvare nøyaktig med parameterne til prosedyren eller funksjonen den kaller. Hvis bakgrunnsjobbens metode er en funksjon, ignoreres returverdien.

En bakgrunnsjobb kan ha en nøkkel - hvilken som helst søknadsverdi. Nøkkelen introduserer en begrensning på lansering av bakgrunnsjobber - bare én bakgrunnsjobb kan utføres per tidsenhet med en spesifikk nøkkelverdi og et gitt bakgrunnsjobbmetodenavn (metodenavnet består av modulnavnet og navnet på prosedyren eller funksjon). Nøkkelen lar deg gruppere bakgrunnsjobber som har de samme metodene i henhold til en spesifikk applikasjonskarakteristikk, slik at ikke mer enn én bakgrunnsjobb utføres innenfor en gruppe.

Bakgrunnsjobber opprettes og administreres programmatisk fra enhver tilkobling. Enhver bruker har lov til å lage en bakgrunnsjobb. Dessuten utføres den på vegne av brukeren som opprettet den. Å motta oppgaver, samt vente på at de er fullført, er tillatt fra enhver tilkobling til en bruker med administrative rettigheter, eller til brukeren som opprettet disse bakgrunnsoppgavene.

En bakgrunnsjobb er et rent sesjonsobjekt og tilhører ikke noen brukerøkt. For hver oppgave opprettes en spesiell systemøkt som kjører på vegne av brukeren som ringte. Bakgrunnsjobber har ikke vedvarende tilstand.

En bakgrunnsjobb kan skape andre bakgrunnsjobber. I klient-serverversjonen lar dette deg parallellisere komplekse beregninger på tvers av klyngearbeiderprosesser, noe som kan øke hastigheten på beregningsprosessen som helhet betydelig. Parallellisering implementeres ved å skape flere barnebakgrunnsjobber og vente på at hver av dem skal fullføres i hovedbakgrunnsjobben.

Bakgrunnsjobber som fullføres eller mislykkes, lagres i 24 timer og slettes deretter. Hvis antallet fullførte bakgrunnsjobber overstiger 1000, slettes også de eldste bakgrunnsjobbene.

Planlagte oppgaver

Planlagte oppgaver brukes når det er nødvendig å utføre visse periodiske eller engangshandlinger i henhold til en tidsplan.

Planlagte oppgaver lagres i informasjonsbasen og lages basert på metadataene til rutineoppgaven som er definert i konfigurasjonen. Metadata spesifiserer slike parametere for en rutineoppgave som: kalt metode, navn, nøkkel, mulighet for bruk, tegn på forhåndsbestemmelse osv. Når du oppretter en rutineoppgave, kan du i tillegg spesifisere tidsplanen (kan spesifiseres i metadataene), verdier ​av metodeparametrene, navnet på brukeren som utfører rutineoppgaver på vegne, etc.

Oppretting og administrasjon av planlagte oppgaver utføres programmatisk fra enhver tilkobling og er kun tillatt for brukere med administrative rettigheter.

Merk. Når du arbeider i filversjonen, er det mulig å opprette og redigere rutineoppgaver uten å starte oppgaveplanleggeren.

Tilknyttet en rutineoppgave er en metode som kalles når rutineoppgaven utføres. Rutineoppgavemetoden kan være en hvilken som helst prosedyre eller funksjon av en ikke-global felles modul som kan kalles på serveren. Parametrene til en rutineoppgave kan være alle verdier som er tillatt å overføre til serveren. Parametrene til en rutineoppgave må samsvare nøyaktig med parameterne til prosedyren eller funksjonen den kaller. Hvis rutineoppgavemetoden er en funksjon, ignoreres returverdien.

En rutineoppgave kan ha en nøkkel - hvilken som helst applikasjonsverdi. Nøkkelen introduserer en begrensning på lanseringen av planlagte oppgaver, fordi per tidsenhet, blant rutineoppgaver knyttet til det samme metadataobjektet, kan bare én rutineoppgave med en bestemt nøkkelverdi utføres. Nøkkelen lar deg gruppere rutineoppgaver knyttet til det samme metadataobjektet i henhold til en spesifikk applikasjonskarakteristikk, slik at det ikke utføres mer enn én rutineoppgave innenfor én gruppe.

Under konfigurasjonen kan du definere forhåndsdefinerte rutineoppgaver. Forhåndsdefinerte rutineoppgaver er ikke forskjellig fra vanlige rutineoppgaver, bortsett fra at de ikke eksplisitt kan opprettes eller slettes. Hvis i metadataene til den planlagte oppgaven er den satt tegn på en forhåndsbestemt rutineoppgave, så når du oppdaterer konfigurasjonen i infobasen, vil det automatisk opprettes en forhåndsdefinert rutineoppgave. Hvis det forhåndsbestemte flagget slettes, vil den forhåndsdefinerte rutineoppgaven automatisk slettes ved oppdatering av konfigurasjonen i infobasen. Startverdiene til egenskapene til en forhåndsdefinert planlagt oppgave (for eksempel en tidsplan) er satt i metadataene. I fremtiden, når applikasjonen kjører, kan de endres. Forhåndsdefinerte rutineoppgaver har ingen parametere.

Rutineoppgaveplanen bestemmer på hvilke tidspunkter rutineoppgaven skal kjøres. Tidsplanen lar deg angi: dato og klokkeslett for starten og slutten av oppgaven, utførelsesperioden, ukedagene og månedene som den planlagte oppgaven skal utføres innen, etc. (se beskrivelsen av den bygde- på språk).

Eksempler på rutinemessige oppgaveplaner:

Hver time, bare én dag

RepeatDays Period = 0, RepeatDays Period = 3600

Hver dag en gang om dagen

RepeatDays Period = 1, RepeatDays Period = 0

En dag, en gang

PeriodRepeatDays = 0

Annenhver dag en gang om dagen

PeriodRepeatDays = 2

Hver time fra 01.00 til 07.00 hver dag

PeriodRepeatDays = 1
Gjenta periodeI løpet av dagen = 3600
Starttid = 01.00
Sluttid = 07.00

Hver lørdag og søndag kl 09.00

PeriodRepeatDays = 1
Ukedager = 6, 7
Starttid = 09.00

Hver dag i en uke, hopp over en uke

PeriodRepeatDays = 1
PeriodeUker = 2

Klokken 01.00 en gang

Starttid = 01.00

Siste dag i hver måned kl 9:00.

PeriodRepeatDays = 1
DagInMåned = -1
Starttid = 09.00

Femte dag i hver måned kl. 9:00

PeriodRepeatDays = 1
DagI Måned = 5
Starttid = 09.00

Andre onsdag i hver måned kl. 9:00

PeriodRepeatDays = 1
DagUkeI Måned = 2
Ukedager = 3
Starttid = 09.00

Du kan sjekke om en oppgave kjører for en gitt dato (RequiredExecution-metoden til ScheduleTasks-objektet). Planlagte oppgaver utføres alltid under navnet til en bestemt bruker. Hvis brukeren av den planlagte oppgaven ikke er spesifisert, skjer kjøringen på vegne av standardbrukeren som har administrative rettigheter.

Rutineoppgaver utføres ved hjelp av bakgrunnsoppgaver. Når planleggeren bestemmer at en planlagt oppgave skal startes, opprettes det automatisk en bakgrunnsjobb basert på denne planlagte oppgaven, som utfører all videre behandling. Hvis denne rutineoppgaven allerede kjører, vil den ikke kjøres igjen, uavhengig av tidsplanen.

Planlagte oppgaver kan startes på nytt. Dette gjelder spesielt når rutineoppgavemetoden må garanteres å bli utført. En rutineoppgave startes på nytt når den avsluttes unormalt, eller når arbeidsprosessen (i klient-serverversjonen) eller klientprosessen (i filversjonen) som rutineoppgaven ble utført på, avsluttes unormalt. I den planlagte oppgaven kan du angi hvor mange ganger den må startes på nytt, samt intervallet mellom omstart. Når du implementerer den omstartbare rutineoppgavemetoden, må du ta i betraktning at når den startes på nytt, vil utførelsen starte fra begynnelsen, og ikke fortsette fra øyeblikket av unormal avslutning.

Det er viktig å huske det Sluttid vil ikke nødvendigvis fullføre bakgrunnsjobben på det angitte tidspunktet. Noen utsagn:
* En bakgrunnsjobb kan ignorere den automatiske kanselleringen hvis den ikke sitter fast, men fortsetter å kjøre av en eller annen grunn
at ikke alle plattformoperasjoner kan reverseres. Hvis den innebygde sykliske koden for språk utføres, avbryt jobben
kanskje ellers nei. Alt avhenger av hva jobben gjør.
* Sluttid - grensen som en oppgave kan starte i stedet for slutt?
* Tvunget avslutning av en oppgave ruller tilbake endringene som er gjort i starten av transaksjonen?

Funksjoner for å utføre bakgrunnsjobber i fil- og klient-servervarianter

Mekanismene for å utføre bakgrunnsjobber i fil- og klient-serverversjonene er forskjellige.

  • I filversjonen må du opprette en dedikert klientprosess som vil utføre bakgrunnsjobber. For å gjøre dette må klientprosessen med jevne mellomrom kalle opp den globale kontekstfunksjonen ExecuteJobProcessing. Bare én klientprosess per infobase skal behandle bakgrunnsjobber (og følgelig kalle denne funksjonen). Hvis en klientprosess ikke er opprettet for å behandle bakgrunnsjobber, vil feilen "Job Manager er ikke aktiv" vises når du programmerer tilgang til jobbmotoren. Det anbefales ikke å bruke en klientprosess som behandler bakgrunnsjobber for andre funksjoner.

Når bakgrunnsjobber for klientprosessbehandling er startet, er andre klientprosesser i stand til å programmere tilgang til bakgrunnsjobbmotoren, dvs. kan kjøre og administrere bakgrunnsjobber.

I klient-serverversjonen brukes en oppgaveplanlegger for å utføre bakgrunnsjobber, som er fysisk plassert i klyngebehandlingen. For alle bakgrunnsjobber i kø får planleggeren den minst belastede arbeidsprosessen og bruker den til å kjøre den tilsvarende bakgrunnsjobben. Arbeidsprosessen utfører jobben og varsler planleggeren om utførelsesresultatene.

I klient-serverversjonen er det mulig å blokkere utførelse av rutineoppgaver. Utførelsen av rutineoppgaver er blokkert i følgende tilfeller:

  • Det er installert en eksplisitt blokkering av rutineoppgaver på informasjonsbasen. Låsen kan stilles inn via klyngekonsollen;
  • Det er en tilkoblingsblokk på infobasen. Låsen kan stilles inn via klyngekonsollen;
  • SetExclusiveMode()-metoden med True-parameteren ble kalt fra det innebygde språket;
  • I noen andre tilfeller (for eksempel ved oppdatering av databasekonfigurasjonen).

Opprette metadata for en rutineoppgave

Før du programmatisk oppretter en rutineoppgave i infobasen, må du opprette et metadataobjekt for den.

For å lage et metadataobjekt for en rutineoppgave i konfigurasjonstreet i grenen "Generelt" for grenen "Rutineoppgaver", utfør kommandoen "Legg til" og fyll inn følgende egenskaper for rutineoppgaven i egenskapspaletten:

Metodenavn - angi navnet på rutineoppgavemetoden.

Nøkkel - spesifiser en vilkårlig strengverdi som skal brukes som nøkkelen til den planlagte oppgaven.

Tidsplan - angir tidsplanen for rutineoppgaven. For å opprette en tidsplan, klikk på "Åpne"-koblingen og angi de nødvendige verdiene i tidsplanskjemaet som åpnes.

På fanen "Generelt" er start- og sluttdatoene for oppgaven og repetisjonsmodusen angitt.

På "Daglig"-fanen er den daglige tidsplanen for oppgaven angitt.

Vennligst oppgi timeplanen din:

  • starttid og sluttid for oppgaven;
  • oppgavens fullføringstid, hvoretter den vil bli tvunget til å avslutte;
  • oppgave repetisjon periode;
  • varighet av pause mellom repetisjoner;
  • utførelsesvarighet.

Det er tillatt å spesifisere en vilkårlig kombinasjon av betingelser.

På "Ukentlig"-fanen er den ukentlige tidsplanen for oppgaven angitt.

Merk av i avmerkingsboksene for ukedagene der oppgaven skal utføres. Hvis du vil gjenta oppgaven, spesifiser repetisjonsintervallet i uker. For eksempel utføres oppgaven på 2 uker, gjentakelsesverdien er 2.

På fanen "Månedlig" er den månedlige planen for oppgaven angitt.

Merk av i avmerkingsboksene for månedene oppgaven skal utføres. Om nødvendig kan du spesifisere en spesifikk dag (måned eller uke) for utførelse fra begynnelsen av måneden/uken eller slutten.

Bruk - hvis angitt, vil oppgaven bli utført i henhold til tidsplanen.

Forhåndsdefinert - hvis angitt, er oppgaven en forhåndsdefinert oppgave.

Antall gjenforsøk ved unormal avslutning - angir antall gjenforsøk ved unormal avslutning.

Forsøksintervall ved unormal avslutning - spesifiserer gjenforsøksintervallet ved unormal avslutning. Eksempler

Opprette en bakgrunnsjobb "Fulltekstsøkeindeksoppdatering":

BackgroundTasks.Run("UpdatingFullTextSearchIndex");

Opprette en rutineoppgave "Gjenoppretting av sekvenser":

Schedule = Ny ScheduleTask;
Schedule.PeriodRepeatDays = 1;
Schedule.RepeatPeriodDuringDay = 0;

Task = RoutineTasks.CreateRoutineTask("Gjenopprette sekvenser");
Job.Schedule = Tidsplan;
Oppgave.Skriv();

Jobbkonsoll

Behandler med ITS, administrerer rutineoppgaver: ConsoleTasks.epf

Jobber med rutineoppgaver

Jobbobjekter

Jobbobjekter refereres ikke til, men lagres i databasen i en spesiell lagring.

Hvis "Forhåndsdefinert"-flagget er aktivert i metadataene, opprettes et slikt objekt automatisk når 1C:Enterprise startes og eksisterer alltid i nøyaktig én instans. Et slikt objekt kan ikke slettes.

Hvis "Forhåndsdefinert"-flagget ikke er satt, blir objekter for en slik oppgave opprettet og slettet programmatisk, og spesifiserer tidsplanen og parameterne.

Få en liste over oppgaver

Listen over oppgaver kan fås ved hjelp av metoden Få RutineTasks global jobbleder Rutineoppgaver

ScheduledJobs Manager

Få ScheduledJobs (GetScheduledJobs)

Syntaks:

Få rutineoppgaver(<Отбор>)

Alternativer:

<Отбор>(valgfri)

Type: Struktur. Struktur som definerer utvalget. Strukturverdier kan være: UniqueIdentifier, Key, Metadata, Predefined, Usage, Name. Hvis valg ikke er spesifisert, innhentes alle rutineoppgaver.

Hvis du filtrerer etter metadata, kan du som metadataverdi spesifisere enten metadataobjektet til rutineoppgaven eller navnet.

Returverdi:

Type: Array.

Beskrivelse:

Mottar en rekke rutineoppgaver for et gitt utvalg. Å motta planlagte oppgaver er kun mulig for administratoren.

Tilgjengelighet:

For hver regel i reguleringssyklusen
NewLine = Liste over ScheduledTasks.Add();
NewRow.Metadata = Regular.Metadata.View();
NewLine.Name = Regular.Name;
NewString.Key = Regular.Key;
NewLine.Schedule = Schedule.Schedule;
NewLine.User = Regular.UserName;
NewString.Predefined = Vanlig.Forhåndsdefinert;
NewString.Use = Regular.Use;
NewString.Identifier = Regular.UniqueIdentifier;

LastTask = Regular.LastTask;
Hvis LastTask er Udefinert Da
NewLine.Running = LastTask.Start;
NewRow.State = LastTask.State;
slutt om;
EndCycle;

Opprettelse

Laget av Create RoutineTask-metoden for lederen av rutineoppgaver:

RoutineTask = RutineTasks.CreateRoutineTask(MetadataSelection);

RegularTask.Name = Navn;
RegularTask.Key = Nøkkel;
RegularTask.Use = Bruk;
RoutineTask.UserName = UsersChoice;
RutineTask.Number ofRepetitionsAtEmergencyCompletion =AntallRepetisjonerAtEmergencyCompletion;
ScheduledTask.RepeatIntervalAtEmergencyCompletion = Prøv på nyttIntervalAtEmergencyCompletion;
ScheduleTask.Schedule = Tidsplan;
RegularTask.Record();

TaskObject = RoutineTasks.CreateRoutineTask("ExchangeExchange");

TaskObject.Name = Navn;
JobObject.Use = Sant;

Oppgaveobjektet har et "Parameters"-felt der metodeparameterne er spesifisert:

Planlagt jobb

Parametere

Bruk:

Lese og skrive.

Beskrivelse:

Type: Array. En rekke parametere for en planlagt oppgave. Antall og sammensetning av parametere må samsvare med parameterne for rutineoppgavemetoden.

Tilgjengelighet:

Server, tykk klient, ekstern tilkobling.

Merk:

Lese- og skrivefunksjoner er kun tilgjengelig for administratoren.

Fjerning

Slettet ved hjelp av Delete()-metoden til oppgaveobjektet:

ScheduledTask.Delete();

Få et jobbobjekt

  • liste via GetRoutineTasks-metoden:
    Rutine = RutineTasks.GetRoutineTasks(Utvalg);
  • via FindByUniqueIdentifier for oppgavebehandlingsmetoden:
    Task = ScheduledTasks.FindByUniqueIdentifier(UID);

[du må registrere deg for å se lenken]

Asynkron programmeringskonsept

Det asynkrone programmeringskonseptet er at resultatet av en funksjon ikke er umiddelbart tilgjengelig, men etter en tid i form av et asynkront (krenker den normale utførelsesrekkefølgen) anrop.

De. Hovedideen med asynkron programmering er å utstede individuelle metodeanrop og fortsette å gjøre annet arbeid parallelt uten å vente på at samtalene skal fullføres.

Noen metoder som minimerer sannsynligheten for unntak krever ikke en asynkron tilnærming, men andre krever det helt i begynnelsen av utviklingen.

Som det fremgår av grafene er det ingen koeffisient for nyttige interaktive brukerhandlinger med en synkron programmeringsmodell, siden systemet blokkerer brukergrensesnittet, mens med en asynkron modell fortsetter brukeren å jobbe aktivt i systemet.

Når du kjører synkront, har applikasjonen bare én tråd. Med den asynkrone programmeringsmodellen kan du kjøre flere tråder parallelt og reagere på nye brukerhandlinger mens de kjøres. Når n-tråden er utført, viser du resultatet på skjermen.

Bakgrunnsoppgaver i 1C:Enterprise 8

I 1C:Enterprise 8 er bakgrunnsjobber designet for å utføre applikasjonsoppgaver asynkront. De kan generere barnebakgrunnsjobber, for eksempel for å parallellisere komplekse beregninger på tvers av forskjellige fungerende servere i klyngen i en klient-server-driftsmodus.

Det er mulig å begrense utførelsen av bakgrunnsjobber som har de samme metodene basert på et spesifikt søknadskriterium. Programmatisk opprettelse og administrasjon av bakgrunnsjobber er mulig fra enhver brukerforbindelse til systeminformasjonsbasen. Bakgrunnsjobben kjører på vegne av brukeren som opprettet den.

Oppgavemekanismen fungerer både i klient-server- og filmodus, men mulighetene for å administrere og utføre oppgaver i begge versjoner er noe forskjellige.

Klient-server-alternativ

I klient-serverversjonen utføres oppgaveplanlegging av oppgaveplanleggeren, som er fysisk plassert i klyngebehandlingen.

Planleggeren sjekker med jevne mellomrom om noen forespørsler er mottatt om å kjøre bakgrunnsjobber. Hvis det er jobber som må utføres, bestemmer planleggeren de minst belastede arbeidsprosessene i klyngen og tildeler sekvensielt hver av dem sin oppgave å utføre. Dermed kan den samme arbeidsprosessen potensielt utføre flere jobber parallelt. Etter at en jobb er mottatt av en arbeidsprosess, etablerer arbeidsprosessen en forbindelse til infobasen og utfører jobben innenfor den forbindelsen. Etter at jobben er fullført, varsler arbeidsprosessen planleggeren om jobben ble fullført vellykket eller mislykket.

Filalternativ

Fra og med versjon 8.3.3.641 av plattformen har utviklerne forenklet arbeidet med bakgrunnsjobber i filversjonen betydelig.

Tidligere, for å utføre oppgaver automatisk, var det nødvendig å starte en separat, ekstra 1C:Enterprise-sesjon, brukt som en oppgaveplanlegger. Og i denne økten var det nødvendig med jevne mellomrom å utføre den innebygde språkmetoden ExecuteTaskProcessing(). Denne tilnærmingen var ganske tungvint, upraktisk og begrenset i stor grad bruken av bakgrunns- og rutineoppgaver i filversjonen av arbeidet.

Nå har alt blitt mye enklere. Hvis en tynn eller tykk klient starter, og også hvis webserveren har klientforbindelser, startes en annen tråd automatisk i hver av disse applikasjonene med en tilkobling til databasen. Disse trådene er engasjert i å utføre bakgrunns- og rutineoppgaver.

Hver av de oppførte applikasjonene utfører sine egne bakgrunnsoppgaver. Hvis en søknad har satt i gang flere bakgrunnsjobber, utføres de sekvensielt, i den rekkefølgen de ble mottatt.

Den åpenbare ulempen med 1C bakgrunnsjobber: siden de utføres på serversiden, er det ingen mulighet for interaktivt arbeid med brukeren (det er for eksempel umulig å vise en melding eller annen informasjon; alle disse dataene må lagres i informasjonsbasen og behandles videre i på en eller annen måte).

Det skal bemerkes at bakgrunnsjobber er rene programvareobjekter og ikke kan lagres i databasen. Det vil si at vi bare kan lage en forekomst av en klasse, initialisere dens egenskaper og starte den for kjøring.

Et eksempel på asynkron kodekjøring i 1C:Enterprise 8

«Å skrive programmer der resultatet av et funksjonsanrop kommer ukjent når er mye vanskeligere enn vanlige. Nestede samtaler, feilhåndtering, kontroll over hva som skjer - alt blir mer komplisert,” bare de som ikke vet hvordan de skal bruke plattformens evner riktig vil si dette, men ikke vi!

La oss demonstrere enkelheten og elegansen til asynkron kodekjøring i 1C:Enterprise 8!

Trinn 1. La oss lage et nytt informasjonssikkerhetssystem for konfigurasjonsutvikling

Steg 2. I konfigurasjonen vil vi legge til den generelle modulen "Asynchronous Handlers"

Hvorfor la vi til en delt modul? Alt er enkelt her: for å utføre asynkrone operasjoner i 1C:Enterprise 8, brukes bakgrunnsjobber, som har sin egen leder - "BackgroundTask Manager". Dette objektet har en "Kjør"-metode, ved hjelp av hvilken bakgrunnsoppgaven startes.

La oss gå til syntaksassistenten.

Så vi trenger en felles modul.

Trinn 3. I den generelle modulen "Asyncronous Handlers" vil vi legge til eksportprosedyren OurLongOperation()

Prosedyre OurLongOperation(Duration) Export // Simulering av en langsiktig handling (Varighet sek.). OperationStartDate = CurrentDate(); While CurrentDate() - Startdato for operasjon< Длительность Цикл КонецЦикла; КонецПроцедуры

Trinn 4. Legg til "Asynchronous Programming Concept"-behandling til konfigurasjonen (du kan opprette ekstern behandling)

Legg til ett attributt i skjemaet:

Varighet (antall)

og to lag

Utfør LongOperation;

Utfør en lang-lang operasjon asynkront.

Trinn 5. I følge syntaksassistenten, fyll ut skjemamodulen

&På klientprosedyren Utfør Long-RunningOperation(Command) ExecuteLong-RunningOperationOnServer(); EndProcedure &OnServer Prosedyre ExecuteLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duration); Slutt på prosedyre &På klienten Prosedyre Utfør langvarig operasjon asynkront (kommando) Utfør langvarig operasjon asynkront på server (); Slutt på prosedyren &På serveren Prosedyre Utfør langvarig operasjon asynkront på Server() Parameters = New Array; Parameters.Add(Varighet); BackgroundTasks.Execute("AsynchronousHandlers.OurLongOperation", Parameters, New UniqueIdentifier, "Eksempel på asynkron programmeringskonsept"); Sluttprosedyre

Trinn 6. La oss starte og sjekke!

Resultat:

Hvis vi klikker på "Utfør lang operasjon"-knappen, blir brukergrensesnittet blokkert i "Varighet" sekunder;

Hvis vi klikker på knappen "Utfør langvarig drift asynkront", blokkeres ikke brukergrensesnittet og programkoden kjøres parallelt.

Vi kan verifisere at programkoden kjøres asynkront ved å se på loggen.

Vi kan feilsøke programkode som kjører i "bakgrunnen" hvis vi setter riktig egenskap i feilsøkingsparametrene.

Et eksempel på asynkron kodekjøring i 1C:Enterprise 8 ved bruk av BSP

La oss vurdere et eksempel på implementeringen av det asynkrone programmeringskonseptet i 1C:Enterprise 8 i BSP ved å bruke eksempelet på behandling av "Aktuelle saker".

Logikken er som følger: når programmet startes, initialiseres arbeidsområdet på startsiden, der behandlingsskjemaet "Current Affairs" kan vises. Dette skjemaet fylles ut av brukerens aktuelle saker, og det tar tid å fylle det ut. Hvis utviklere ikke hadde muligheten til å kjøre kode asynkront, ville brukergrensesnittet være blokkert hele tiden behandlingsskjemaet ble fylt ut!

La oss analysere programkoden til skjemaet.

Skjemahendelsen "When CreatedOnServer" kaller "RunBackgroundTask"-prosedyren - dette er hva vi trenger.

Uten å bli distrahert av nyansene, la oss analysere denne prosedyren

Og her ser vi at bakgrunnsjobblederen og dens "Run"-metode brukes. Merk at utviklere lagrer en unik ID for bakgrunnsjobben.

For å gjøre dette bruker utviklere metoden ConnectWaitHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>).



I en tilkoblet prosedyre Connectable_CheckTaskComplete() utviklere kaller funksjonen JobCompleted (TaskID)


Denne funksjonen kontrollerer utførelsen av en bakgrunnsjobb ved hjelp av identifikator.

Det skal bemerkes at BSP har utviklet generelle moduler for å støtte langsiktig serverdrift.

Dermed øker det asynkrone programmeringskonseptet i 1C:Enterprise 8 litt kompleksiteten til å løse problemer for utvikleren, men forbedrer funksjonaliteten til programmet betydelig fra brukerens synspunkt.

Mortal Kombat X - spillet starter ikke, det viser en svart skjerm, en feil, lar ikke menyen fortsette, og Gud vet hvilke andre problemer. Hvordan du løser dette er i artikkelen vår.

Før du begynner å feilsøke, sjekk om datamaskinen oppfyller systemkravene.

Minimum systemkrav:
OS: Windows Vista/7/8 (kun 64-bits systemer);
Prosessor: Intel Core i5-750 med en frekvens på 2,67 GHz eller AMD Phenom II X4 965 med en frekvens på 3,4 GHz;
RAM: 3 GB;
Skjermkort: NVIDIA GeForce GTX 460 eller AMD Radeon HD 5850;
DirectX-versjon: 11;
Ledig harddiskplass: 25 GB;

Anbefalte systemkrav:
OS: Windows 7/8 (kun 64-bits systemer);
Prosessor: Intel Core i7-3770 @ 3,4 GHz eller AMD FX-8350 @ 4,0 GHz;
RAM: 8 GB;
Skjermkort: NVIDIA GeForce GTX 660 eller AMD Radeon HD 7950;
DirectX-versjon: 11;
Ledig harddiskplass: 40 GB;
Bredbånd Internett-tilkobling.

Hvis maskinvaren din oppfyller minimumskravene, har du gjort halve jobben. Sjekk og oppdater også all nødvendig programvare og drivere.

Merk: Hvis du bruker en hvilken som helst versjon av Windows XP / Vista / 7 / 8 / 8.1 med forskjellige justeringer, anbefaler vi på det sterkeste at du fjerner dette søppelet og installerer et rent bilde fra Microsoft. Ellers kan du få mange feil nettopp på grunn av programvaren din som kan sette inn mye unødvendig søppel i systemet. Hvis du har gjort alle tingene vi anbefalte ovenfor, er det på tide å gjøre deg kjent med listen over feil som brukere oftest møter.

Mortal Kombat X vil ikke starte

1. Sørg for å sjekke at det ikke er noen russiske bokstaver i banen til spillfilene;
2. Sjekk at spillet oppfyller systemkravene, og kjør også spillet ikke på det innebygde skjermkortet, men på ati/nvidia;
3. Kjør spillet som administrator eller i kompatibilitetsmodus;
4. Deaktiver antivirus under oppstart;
5. Sjekk at det ikke er noen russiske karakterer i banen til spillet;
6. Vent på oppdateringen, kanskje utviklerne tok ikke hensyn til noe og problemene i spillet gjenstår.

Spillet krasjer med en ukjent feil

Start datamaskinen på nytt og sjekk integriteten til hurtigbufferen i Steam, hvis lisensen er det, eller endre innpakningen/installer den siste oppdateringen/oppdateringen.
Vi gjør følgende på Steam:
1. I spillegenskapene, i oppdateringsdelen, må du sette bakgrunnslasting til "alltid tillat";
2. Gå deretter til "tillegg"-delen, i de samme egenskapene, og merk av i boksen for hvert installasjonsprogram;
3. Hvis nedlastingen ikke starter automatisk etter at du har lukket egenskapene, høyreklikk på spillet (i biblioteket) og klikk på konfigurer;
4. Kanskje de to første gangene vises en feil om at spillet allerede kjører, men du må fortsette å velge konfigurer (det fungerer garantert 3 ganger) og pakkene vil bli lastet ned.

Mortal Kombat X krasjer med feilen "0xc000007b"

Dette er en driverrelatert feil. Vi oppdaterer dem på den offisielle nettsiden til driverprodusenten din og starter spillet som administrator.

Gamepad-problemer i Mortal Kombat X

Prøv å slå den av og på i selve spillet. Hvis noe skjer og det begynner å fungere, betyr det at det fungerer. Hvis det ikke fungerer, men systemet ser det, må du oppdatere driverne for det. Hvis det ikke fungerer etter det, så kjøp en annen joystick, siden denne ikke er kompatibel med spillet.

Mortal Kombat X krasjer i hovedmenyen

Deaktiver alle tredjepartsprogrammer og håndkontrolleren, hvis du koblet den til, for en stund. Og prøv å kjøre den i vindusmodus.

Mortal Kombat krasjer med "D3D Error"

Denne feilen er typisk for AMD-skjermkort. Gå til Steam-biblioteket og velg spillegenskaper, i lanseringsinnstillingene skriv parameteren: "-dxlevel 81" (uten anførselstegn).

Mortal Kombat X svart skjerm

1. Oppdater eller installer driverne for skjermkortet på nytt. Hvordan du oppdaterer drivere finner du i dette spørsmålet
2. Start spillet i et vindu, og hvis spillet starter setter du det i fullskjermmodus ved å trykke ctrl + enter (det fungerer imidlertid ikke med alle spill). Vindumodus kan også aktiveres i spillinnstillingsfilene eller ved å spesifisere –w-parameteren i startparameterne, men dette fungerer heller ikke i alle spill.
3. Kjør spillet som administrator eller i kompatibilitetsmodus. Dessuten, hvis dette ikke hjelper deg, prøv å kjøre spillet samtidig i kompatibilitetsmodus og i vindusmodus.
4. Deaktiver det andre skjermkortet hvis tilgjengelig
5. Bytt fra det innebygde skjermkortet til Ati/Nvidia hvis du spiller på en bærbar datamaskin
6. Fjern merket for Skrivebeskyttet fra alle spillfiler. Høyreklikk på spillmappen og velg egenskaper.

Mortal Kombat X krasjer til skrivebordet

1. Slå av all tilleggsprogramvare du ikke trenger mens du spiller: spillere, nettlesere, antivirus osv.
2. Senk spillinnstillingene til minimum.
3. Øk prioriteringen av spillprosessen i oppgavebehandlingen til Høy
4. Start spillet ved å bruke programmer som frigjør minne Game Prelauncher eller Gamebooster
5. Aktiver Vertical Sync i spillinnstillingene (Vsync), og hvis situasjonen ikke blir bedre, slå den av. Dette alternativet kan enten øke eller redusere antall rammer.
6. Bruk et 64-biters OS for et komfortabelt tidsfordriv i nye spill.

Fungerende løsning på ytelsesproblemer fra utenlandske venner

1. Åpne Enhetsbehandling
2. Finn skjermkortet ditt og fjern skjermdriveren fullstendig (på egen hånd: det er bedre å brukeammet)
3. Start datamaskinen på nytt
4. Gå til systempartisjonen (C:) og slett NVIDIA-mappen
5. Last ned og installer den nyeste nvidia-driveren og sjekk om physx er den nyeste versjonen
6. Start datamaskinen på nytt
7. Finn mappen _CommonRedist i mappen med MK X installert
8. Installer directx og begge c++-pakkene (hvis du bruker 32-bitsversjonen, er det nok å installere kun x86-pakken)
9. I oppgavebehandlingen deaktiverer du unødvendige programmer som kjører i bakgrunnen
10. Start spillet
11. Gå til innstillinger og sett oppløsningen til 1280X720, vindusmodus, og enten deaktiver alle andre innstillinger eller sett dem til minimum
12. Åpne avanserte innstillinger og gjør det samme
13. Sett teksturkvaliteten til middels og anisotropisk filtrering til 2
14. Sett partikler til 50
15. Start spillet på nytt - det skal åpnes i vindusmodus
16. Trykk alt+enter for fullskjermmodus (vindusmodus løser problemet med vertikal synkronisering, samt fullskjermmodus aktivert på denne måten
17. Ikke endre noen grafiske innstillinger - bare prøv å starte et hvilket som helst kort og spill.
18. hvis vindusmodus ikke har dukket opp, men du kan se spillikonet på oppgavelinjen, klikk på det og trykk alt + enter;
19. ikke endre noen grafiske innstillinger på denne scenen - bare gå til et kart og prøv innstillingene dine.

Mortal Kombat X henger, bremser ned og har lav FPS

Det er mange klager på at maskinvaren er kraftig, men samtidig henger spillet fryktelig og fryser. Synderen er en litt skjev port, fra konsoller til PC Selv om den fungerer perfekt på noen komponenter, vil den bremse ned på andre med lignende kraft.

Gå inn i spillet, minimer det, åpne deretter NVidia-innstillinger, der, blant alle prosessene, finn Mortal Kombat X-prosessen. Så, i det andre trinnet, finn og velg grafikkprosessoren "NVIDIA High-Performance Processor." Deretter, i tredje avsnitt, velger du "Vertikal synkroniseringspuls" og merker av for på-boksen. lagre innstillingene og start spillet på nytt.

Aktiver anisotropisk filtrering, i NVidia-innstillinger gå til "PhysX Configuration Setup", velg din GPU (skjermkort) der.

Vi fjerner etterslep. Nvidia geForce Experience

Nvidia geForce Experience vi ser etter MKH og driver med optimalisering. Etter dette skal forsinkelsene forsvinne.

Vi vil fikse feil i Windows 10. Men omtrent det samme må gjøres i Windows XP, 7 og 8. I Windows 7 og senere utgivelser har utviklerne forbedret gjenopprettingssystemet for oppstartsproblemer. I eldre versjoner av systemet må alvorlige feil ofte løses ved å installere på nytt.

Deaktiver eksterne enheter

Prøv å huske hvilke endringer du nylig har gjort i systemet: installerte du nye enheter eller byttet noe. Det kan være et problem med en av maskinvarekomponentene. Prøv å deaktivere:

  1. USB-stasjoner.
  2. Kortlesere.
  3. Skrivere.
  4. Skannere.
  5. Kameraer.
  6. Alle andre eksterne enheter.

Hvis dette ikke hjelper, koble fra tastaturet og musen: du må utelukke alle mulige kilder til funksjonsfeil.

Det kan også være forårsaket av interne komponenter, for eksempel RAM. På en stasjonær PC kan du sjekke ytelsen til RAM ved å koble til stripene én etter én.

Sjekk strømmen

Hvis datamaskinen ikke slår seg på i det hele tatt, vær oppmerksom på strømkabelen og stikkontaktene. Ikke glem strømbryteren på baksiden av din stasjonære datamaskin.

Hvis alt fungerer på dette nivået, men datamaskinen fortsatt ikke slår seg på, er problemet mest sannsynlig i strømforsyningen, som du sannsynligvis ikke vil kunne fikse selv: du må erstatte den eller få den reparert av en spesialist.

Det er mulig at datamaskinen slår seg på, men bare for en kort stund. Dette er det samme problemet med strømforsyningen.

Konfigurer disken for å starte opp systemet

Feil kan vises under oppstart: Et operativsystem ble ikke funnet. Prøv å koble fra stasjoner som ikke inneholder et operativsystem. Trykk Ctrl+Alt+Del for å starte på nytt eller Oppstartsfeil. Start på nytt og velg riktig oppstartsenhet eller Sett inn oppstartsmedier i valgt oppstartsenhet.

BIOS- eller UEFI-innstillingene kan settes til å starte opp fra en ekstern enhet eller annen logisk partisjon i stedet for fra systemstasjonen. Du kan gjenopprette standardinnstillinger slik:

  1. For å starte en datamaskin på nytt.
  2. Umiddelbart etter omstart trykker du på systemtasten, for eksempel F2. Dette kan være en annen nøkkel: vanligvis under systemoppstart kan den finnes nederst på skjermen med logoen til den bærbare datamaskinen eller hovedkortprodusenten.
  3. I innstillingene setter du ønsket disk til første plass i oppstarten.
  4. Velg alternativet Lagre og avslutt for å lagre endringene.

Hvis det ovennevnte ikke hjelper, må du gjenopprette systemets oppstartslaster. For å gjøre dette trenger du en oppstartbar USB-flash-stasjon eller gjenopprettingsdisk med et system med passende kapasitet. Hvordan lage en oppstartbar USB-flash-stasjon eller -disk, les Lifehacker om å installere Windows.

Start systemet fra en flash-stasjon eller disk ved å velge ønsket alternativ i oppstartsmenyen. I Windows-installasjonsmenyen som åpnes, velg "Systemgjenoppretting."

Fra gjenopprettingsmenyen velger du Feilsøking → Avanserte alternativer → Oppstartsreparasjon. Etter dette vil systemet prøve å automatisk fikse oppstartslasteren. I de fleste tilfeller løser det problemet.

Det samme kan gjøres manuelt via kommandolinjen, men det er bedre å velge det automatiske alternativet for ikke å forverre situasjonen.

Hvis denne metoden ikke hjelper, ligger problemet sannsynligvis i maskinvaren: harddisken er skadet.

Fra gjenopprettingsmenyen velger du Feilsøking → Avanserte alternativer → Ledetekst.

På kommandolinjen må du skrive inn følgende kommandoer en etter en: diskpart → listevolum (husk å huske navnet på Windows-disken) → exit.

For å sjekke disken for feil og skade, skriv inn kommandoen chkdsk X: /r (der X er navnet på Windows-disken). Sjekken tar vanligvis ganske lang tid, du må vente.

Start Windows i sikkermodus

På grunn av en plutselig avstenging av datamaskinen under installasjonen av operativsystemoppdateringer, rensing av virus og unødvendige oppføringer i registeret, eller på grunn av feil til verktøy for å øke hastigheten på Windows, kan systemfiler bli skadet. I dette tilfellet vil en "blue screen of death" vises når systemet starter opp.

Prøv å starte Windows i sikker modus uten å laste inn drivere og programmer ved oppstart. Hvis datamaskinen kjører i denne modusen, må du fjerne driverne, utføre en tilbakerulling av systemet og skanne etter virus.

Hvis du har gjenopprettingspunkter, er dette problemet ganske enkelt å løse. Du trenger bare å rulle tilbake til den forrige stabile konfigurasjonen.

Installer systemfiler på nytt

Trinnene ovenfor hjelper kanskje ikke. Deretter må du tilbakestille Windows-innstillingene og installere systemet på nytt mens du lagrer filene. Dessverre må alle programmer installeres på nytt.

I gjenopprettingsmiljøet velger du Feilsøking → Tilbakestill denne PC-en → Behold filene mine → Tilbakestill.

Systemet vil gå tilbake til de opprinnelige innstillingene.