X start niet. De computer gaat aan, maar het besturingssysteem start niet: mogelijke oorzaken en oplossingen. Mortal Kombat X crasht met "0xc000007b"-fout

Gebruikelijk achtergrond banen in 1C:Enterprise wordt gelanceerd onder de regelgeving.

Dat wil zeggen, in het begin genereert de geplande taak een achtergrondtaak. Maar indien nodig
we kunnen ook programmatisch een achtergrondtaak starten.
Tegelijkertijd kan het alle methoden en eigenschappen gebruiken die beschikbaar zijn op de server, tk. en het wordt uitgevoerd op de server.
In feite voert de achtergrondtaak zelf geen actie uit. Het wordt alleen gestart
om een ​​procedure uit te voeren vanuit een gedeelde module. Als de procedure parameters gebruikt,
ze kunnen ook worden doorgegeven op het moment dat een achtergrondtaak wordt gestart.

Laten we eens kijken naar het eenvoudigste voorbeeld. Laten we een verwerking maken die de achtergrond uitvoert
een taak, die op zijn beurt naar het logboek zal schrijven.

Voor zover
voor een achtergrondtaak hebben we een gedeelde moduleprocedure nodig, laten we deze gedeelde module maken
met de mogelijkheid om zijn procedures op de server uit te voeren.

Laten we een procedure maken in deze algemene module die naar het logboek zal schrijven
registratie

Procedure RecordInLogbook(par_EventName, par_Comment) RecordLogbook(par_EventName, , , , par_Comment) exporteren; EindeProcedure

Zoals u kunt zien, zijn er parameters in de procedure. Dus de achtergrondtaak zou een soort van moeten hebben:
manier om de procedure over te dragen.

Laten we nu een verwerking maken waarmee we een achtergrondtaak zullen uitvoeren.

Laten we het op een beheerd formulier maken, maar er zal geen fundamenteel verschil zijn voor gewone formulieren,
dezelfde methoden worden gebruikt. Laten we een eenvoudig formulier maken met één opdracht:


Schrijf in de formuliermodule de volgende code:

&OnServer-procedure WriteZHROnServer() ArrayParameters = Nieuwe array; Array van parameters. Toevoegen( "Gebeurtenis. Achtergrondtaak voltooid") ; Array van parameters. Toevoegen( "Opmerking: controleer of de achtergrondtaak wordt uitgevoerd") ; Achtergrond taken. uitvoeren ( "website_Regelgevende taken. Vermelding in het registratielogboek", matrixparameters); EndProcedure &OnClient Procedure WriteWHR(Command) WriteWHROnServer() ; EindeProcedure

Voert een achtergrondtaak uit met behulp van de methode uitvoeren()
achtergrond jobmanager.

De eerste parameter van deze methode is
de naam van de gemeenschappelijke module en de naam van de uit te voeren procedure, het type is een string.
De tweede parameter is een array met parameterwaarden voor de aangeroepen procedure.
De volgorde van de elementen in de array moet overeenkomen met de volgorde van de parameters in de array.
procedure.
Mag ook aangegeven worden Toets En Naam achtergrond baan.

Laten we nu de verwerking testen. Laten we het openen in 1C:Enterprise-modus en
laten we het uitvoeren. Open vervolgens het registratielogboek en zie dat de taak
werkte succesvol en maakte een overeenkomstige vermelding in het logboek.

1 Job-engine
2 Achtergrond banen
3 geplande taken
4 Eigenaardigheden van het uitvoeren van achtergrondtaken in bestands- en client-serverversies
5 Creëren van geplande taakmetadata
6 Taakconsole
7 Werken met geplande taken
7.1 Taakobjecten
7.2 Een lijst met taken opvragen
7.3 Creatie
7.4 Verwijderen
7.5 Een taakobject verkrijgen

Taakmechanisme

Het taakmechanisme is ontworpen om elke toepassing of functionaliteit volgens een schema of asynchroon uit te voeren.

Het taakmechanisme voert de volgende taken uit:

  • Mogelijkheid om routineprocedures te bepalen in het stadium van systeemconfiguratie;
  • Uitvoering van gespecificeerde acties volgens planning;
  • De uitvoering van een aanroep naar een bepaalde procedure of functie is asynchroon, d.w.z. zonder te wachten op de voltooiing ervan;
  • Het volgen van de voortgang van een bepaalde taak en het verkrijgen van de voltooiingsstatus (een waarde die het succes of falen van de uitvoering aangeeft);
  • Een lijst met huidige taken krijgen;
  • Mogelijkheid om te wachten op de voltooiing van een of meer taken;
  • Opdrachtbeheer (mogelijkheid tot annuleren, blokkeren van uitvoering, enz.).

De job engine bestaat uit de volgende onderdelen:

  • Metadata van geplande taken;
  • geplande opdrachten;
  • Achtergrond banen;
  • Taakplanner.

Achtergrondtaken - ontworpen om applicatietaken asynchroon uit te voeren. Achtergrondtaken worden geïmplementeerd met behulp van de ingebouwde taal.

Geplande taken - ontworpen om toepassingstaken volgens een schema uit te voeren. Geplande taken worden opgeslagen in de infobase en worden aangemaakt op basis van de metadata die in de configuratie zijn gedefinieerd. Metagegevens van geplande taken bevatten informatie zoals naam, methode, gebruik, enzovoort.

Een geplande taak heeft een schema dat bepaalt op welke tijdstippen de methode die aan de geplande taak is gekoppeld, moet worden uitgevoerd. Het schema wordt in de regel ingesteld in de infobase, maar het kan ook worden ingesteld in de configuratiefase (bijvoorbeeld voor vooraf gedefinieerde geplande taken).

De taakplanner wordt gebruikt om de uitvoering van geplande taken te plannen. Voor elke geplande taak controleert de planner periodiek of de huidige datum en tijd overeenkomen met de planning van de geplande taak. Als het overeenkomt, plant de planner die taak om uit te voeren. Om dit te doen, maakt de planner, volgens deze geplande taak, een achtergrondtaak die de eigenlijke verwerking uitvoert.

Achtergrond banen

Achtergrondtaken zijn handig voor het uitvoeren van complexe berekeningen, wanneer het resultaat van de berekening na lange tijd kan worden verkregen. De job engine heeft de middelen om dergelijke berekeningen asynchroon uit te voeren.

Een achtergrondtaak heeft een bijbehorende methode die wordt aangeroepen wanneer de achtergrondtaak wordt uitgevoerd. Een achtergrondtaakmethode kan elke niet-Global Shared Module-procedure of -functie zijn die op de server kan worden aangeroepen. Achtergrondtaakparameters kunnen alle waarden zijn die aan de server mogen worden doorgegeven. De parameters van een achtergrondtaak moeten exact overeenkomen met de parameters van de procedure of functie die wordt aangeroepen. Als de methode van de achtergrondtaak een functie is, wordt de geretourneerde waarde genegeerd.

Een achtergrondtaak kan een sleutel hebben - elke toepassingswaarde. De sleutel introduceert een beperking op het starten van achtergrondtaken - er kan slechts één achtergrondtaak per tijdseenheid worden uitgevoerd met een specifieke sleutelwaarde en een gespecificeerde naam van de achtergrondtaakmethode (de methodenaam bestaat uit de modulenaam en de naam van de procedure of functie). Met de toets kunt u achtergrondtaken die dezelfde methoden hebben, groeperen volgens een bepaald toepassingskenmerk, zodat niet meer dan één achtergrondtaak binnen één groep wordt uitgevoerd.

Achtergrondtaken worden programmatisch gemaakt en beheerd vanaf elke verbinding. Elke gebruiker mag een achtergrondtaak maken. Tegelijkertijd wordt het uitgevoerd namens de gebruiker die het heeft gemaakt. Een gebruiker met beheerdersrechten of de gebruiker die deze achtergrondtaken heeft gemaakt, mag taken ontvangen en wachten tot ze zijn voltooid, vanaf elke verbinding.

De achtergrondtaak is puur een sessieobject, maar behoort niet tot een gebruikerssessie. Voor elke taak wordt een speciale systeemsessie gemaakt die wordt uitgevoerd namens de gebruiker die de oproep heeft gedaan. Achtergrondtaken hebben geen persistente status.

Een achtergrondtaak kan andere achtergrondtaken voortbrengen. In de client-serverversie stelt u dit in staat om complexe berekeningen over clusterwerkprocessen heen parallel te laten lopen, wat het berekeningsproces als geheel aanzienlijk kan versnellen. Parallellisatie wordt geïmplementeerd door verschillende onderliggende achtergrondtaken te spawnen, wachtend tot elk van hen is voltooid in de hoofdachtergrondtaak.

Succesvolle of mislukte achtergrondtaken worden 24 uur bewaard en vervolgens verwijderd. Als het aantal actieve achtergrondtaken de 1000 overschrijdt, worden ook de oudste achtergrondtaken verwijderd.

Geplande opdrachten

Geplande taken worden gebruikt wanneer u bepaalde periodieke of eenmalige acties moet uitvoeren in overeenstemming met het schema.

Geplande taken worden opgeslagen in de infobase en worden aangemaakt op basis van de metadata van de geplande taak die in de configuratie is gedefinieerd. Metadata definieert parameters van een geplande taak als: aangeroepen methode, naam, sleutel, gebruiksmogelijkheid, teken van voorbestemming, enz. om een ​​geplande taak uit te voeren, enz.

Het maken en beheren van geplande taken wordt programmatisch uitgevoerd vanaf elke verbinding en is alleen toegestaan ​​voor gebruikers met beheerdersrechten.

Opmerking. Wanneer u in de bestandsversie werkt, is het mogelijk om geplande taken aan te maken en te bewerken zonder de taakplanner te starten.

Een geplande taak is gekoppeld aan een methode die wordt aangeroepen wanneer de geplande taak wordt uitgevoerd. Een geplande taakmethode kan elke procedure of functie zijn van een niet-globaal gedeelde module die op de server kan worden aangeroepen. Geplande taakparameters kunnen alle waarden zijn die aan de server mogen worden doorgegeven. De parameters van een geplande taak moeten exact overeenkomen met de parameters van de procedure of functie die wordt aangeroepen. Als de geplande taakmethode een functie is, wordt de geretourneerde waarde genegeerd.

Een geplande taak kan een sleutel hebben - elke toegepaste waarde. De sleutel introduceert een beperking op het starten van geplande taken, aangezien per tijdseenheid kan onder geplande taken die zijn gekoppeld aan hetzelfde metadata-object, slechts één geplande taak met een specifieke sleutelwaarde worden uitgevoerd. Met de sleutel kunt u geplande taken die aan hetzelfde metadata-object zijn gekoppeld, groeperen volgens een bepaald toepassingskenmerk, zodat niet meer dan één geplande taak binnen één groep wordt uitgevoerd.

Tijdens de configuratie kunt u vooraf gedefinieerde geplande taken definiëren. Vooraf gedefinieerde geplande taken verschillen niet van reguliere geplande taken, behalve dat ze niet expliciet kunnen worden gemaakt of verwijderd. Als de metadata van de geplande taak is ingesteld op: teken van een vooraf gedefinieerde geplande taak, dan wordt bij het bijwerken van de configuratie automatisch een vooraf gedefinieerde geplande taak gemaakt in de infobase. Als het vooraf gedefinieerde selectievakje is uitgeschakeld, wordt de vooraf gedefinieerde geplande taak automatisch verwijderd in de infobase wanneer de configuratie wordt bijgewerkt. De initiële waarden van de eigenschappen van een vooraf gedefinieerde geplande taak (bijvoorbeeld planning) worden ingesteld in de metadata. In de toekomst, wanneer de applicatie draait, kunnen ze worden gewijzigd. Vooraf gedefinieerde geplande taken hebben geen parameters.

Het geplande taakschema bepaalt op welke tijdstippen de geplande taak moet worden gestart. Met de planning kunt u instellen: de datum en tijd van het begin en einde van de taak, de periode van uitvoering, dagen van de week en maanden waarop de geplande taak moet worden uitgevoerd, enz. (zie de beschrijving van de ingebouwde in taal).

Voorbeelden van geplande taakschema's:

Elk uur, slechts één dag

Periode opnieuw proberenDays = 0, Periode opnieuw proberenDuringDay = 3600

Elke dag een keer per dag

Periode opnieuw proberenDagen = 1, Periode opnieuw proberenDuringDay = 0

Een dag, een keer

Probeerperiode Dagen = 0

Om de dag een keer per dag

Periode opnieuw proberen = 2

Elk uur van 01.00 tot 07.00 elke dag

Periode opnieuw proberen = 1
Periode opnieuw proberen Gedurende de dag = 3600
Starttijd = 01.00
Eindtijd = 07.00

Elke zaterdag en zondag om 09.00

Periode opnieuw proberen = 1
Dagen van de Week = 6, 7
Starttijd = 09.00

Elke dag een week, week voorbij

Periode opnieuw proberen = 1
PeriodeWeken = 2

Eenmalig om 01.00 uur

Starttijd = 01.00

Laatste dag van elke maand om 9.00 uur.

Periode opnieuw proberen = 1
DagInMaand = -1
Starttijd = 09.00

Vijfde van elke maand om 9.00 uur

Periode opnieuw proberen = 1
DagInMaand = 5
Starttijd = 09.00

Tweede woensdag van de maand om 9.00 uur

Periode opnieuw proberen = 1
Dag van de week in de maand = 2
Dagen van de Week = 3
Starttijd = 09.00

U kunt controleren of een taak wordt uitgevoerd voor een bepaalde datum (de RequiredExecution-methode van het ScheduledTasks Schedule-object). Geplande taken worden altijd uitgevoerd op naam van een specifieke gebruiker. Als de gebruiker van de geplande taak niet is opgegeven, vindt de uitvoering plaats namens de standaardgebruiker met beheerdersrechten.

Geplande taken worden uitgevoerd met behulp van achtergrondtaken. Wanneer de planner bepaalt dat een geplande taak moet worden gestart, wordt automatisch een achtergrondtaak gemaakt op basis van deze geplande taak, die alle verdere verwerking uitvoert. Als deze geplande taak al wordt uitgevoerd, wordt deze niet opnieuw uitgevoerd, ongeacht de planning.

Geplande taken kunnen opnieuw worden gestart. Dit is met name het geval wanneer de geplande taakmethode gegarandeerd moet worden uitgevoerd. Een geplande taak wordt opnieuw gestart wanneer deze abnormaal is beëindigd, of wanneer het werkproces (in de client-serverversie) of het clientproces (in de bestandsversie) waarop de geplande taak werd uitgevoerd, abnormaal werd beëindigd. In een geplande taak kunt u specificeren hoe vaak deze opnieuw moet worden opgestart, evenals het interval tussen herstarts. Bij het implementeren van de methode van een herstartbare geplande taak, moet er rekening mee worden gehouden dat wanneer deze opnieuw wordt gestart, de uitvoering vanaf het begin begint en niet verdergaat vanaf het moment dat deze crashte.

Het is belangrijk om te onthouden dat eindtijd zal de achtergrondtaak niet noodzakelijkerwijs op het opgegeven tijdstip voltooien. Enkele uitspraken:
* Een achtergrondtaak negeert mogelijk de automatische annulering als deze niet is opgehangen maar om de reden blijft lopen
dat niet alle platformbewerkingen ongedaan kunnen worden gemaakt. Als cyclische 1C-code wordt uitgevoerd, wordt de taak geannuleerd
kan anders niet. Het hangt allemaal af van wat het werk doet.
* Eindtijd - de limiet waarbinnen een taak kan beginnen en niet eindigen?
* Geforceerde voltooiing van de taak de wijzigingen terugdraait die zijn aangebracht op het moment dat de transactie begon?

Eigenaardigheden van het uitvoeren van achtergrondtaken in bestands- en client-serverversies

Mechanismen voor het uitvoeren van achtergrondtaken in de bestands- en client-serverversie zijn verschillend.

  • In de bestandsversie moet u een speciaal clientproces maken dat achtergrondtaken uitvoert. Hiervoor moet periodiek in het clientproces de globale contextfunctie ExecuteJobProcessing worden aangeroepen. Slechts één clientproces per infobase mag achtergrondtaken verwerken (en daarom deze functie aanroepen). Als er geen clientproces is gemaakt om achtergrondtaken te verwerken, wordt bij programmatische toegang tot de taakengine de fout "Taakmanager is niet actief" gegenereerd. Het wordt niet aanbevolen om het clientproces te gebruiken dat achtergrondtaken verwerkt voor andere functies.

Nadat het clientproces dat achtergrondtaken verwerkt, is gestart, krijgen andere clientprocessen de mogelijkheid om programmatisch toegang te krijgen tot het achtergrondtaakmechanisme, d.w.z. kan achtergrondtaken uitvoeren en beheren.

In de client-serverversie wordt de taakplanner gebruikt om achtergrondtaken uit te voeren, die zich fysiek in de clustermanager bevindt. De planner voor alle achtergrondtaken in de wachtrij krijgt het minst belaste werkproces en gebruikt dit om de bijbehorende achtergrondtaak uit te voeren. Het werkproces voert de taak uit en stelt de planner op de hoogte van de uitvoeringsresultaten.

In de client-serverversie is het mogelijk om de uitvoering van geplande taken te blokkeren. Het blokkeren van de uitvoering van geplande taken vindt plaats in de volgende gevallen:

  • Op de infobase is een expliciete blokkering van geplande taken ingesteld. Het slot is in te stellen via de clusterconsole;
  • Er is een verbindingsblokkering ingesteld op de infobase. Het slot is in te stellen via de clusterconsole;
  • De methode SetExclusiveMode() is aangeroepen vanuit de ingebouwde taal met de parameter True;
  • In sommige andere gevallen (bijvoorbeeld bij het bijwerken van de databaseconfiguratie).

Geplande taakmetagegevens maken

Voordat u programmatisch een geplande taak in de infobase maakt, moet u er een metagegevensobject voor maken.

Om een ​​metadata-object voor een geplande taak te maken in de configuratiestructuur in de vertakking Algemeen voor de vertakking Geplande taken, voert u de opdracht Toevoegen uit en vult u de volgende eigenschappen van de geplande taak in het eigenschappenpalet in:

Methodenaam: geef de naam van de geplande taakmethode op.

Sleutel - geef een willekeurige tekenreekswaarde op die wordt gebruikt als de sleutel van de geplande taak.

Planning - specificeert de planning van de geplande taak. Om een ​​planning te genereren, klikt u op de link "Openen" en stelt u de vereiste waarden in in het planningsformulier dat wordt geopend.

Het tabblad Algemeen specificeert de start- en einddatum van de taak en de herhaalmodus.

Het tabblad "Dagelijks" specificeert het dagelijkse schema voor de taak.

Geef het schema op:

  • begintijd en eindtijd van de taak;
  • de eindtijd van de taak, waarna deze met kracht zal worden voltooid;
  • taakherhalingsperiode;
  • de duur van de pauze tussen herhalingen;
  • uitvoeringsduur.

Een willekeurige combinatie van voorwaarden is toegestaan.

Het weekschema van de taak wordt gespecificeerd op het tabblad Wekelijks.

Schakel de selectievakjes in voor de dagen van de week waarop de taak wordt uitgevoerd. Als u de taak wilt herhalen, geeft u het interval voor opnieuw proberen op in weken. De taak loopt bijvoorbeeld over 2 weken, de herhalingswaarde is 2.

Op het tabblad "Maandelijks" wordt het maandschema van de taak aangegeven.

Schakel de selectievakjes in voor de maanden waarin de taak wordt uitgevoerd. Indien nodig kunt u vanaf het begin van de maand/week of het einde een specifieke dag (maand of week) van uitvoering specificeren.

Gebruik - indien ingesteld, wordt de taak uitgevoerd volgens het schema.

Vooraf gedefinieerd - indien ingesteld, is de taak een vooraf gedefinieerde taak.

Aantal nieuwe pogingen bij crash - Specificeert het aantal nieuwe pogingen bij crash.

Interval voor opnieuw proberen bij crash - Specificeert het interval voor opnieuw proberen bij crash. Voorbeelden

Een achtergrondtaak maken "De zoekindex voor volledige tekst bijwerken":

BackgroundJobs.Run("UpdatingFullTextSearchIndex");

Een geplande taak maken "Sequenties herstellen":

Schema = Nieuw SchemaRegulationTask;
Schedule.RepeatPeriodDays = 1;
Schedule.RepeatPeriodDuringDay = 0;

Taak = ScheduledTasks.Create ScheduledTask ("RestoringSequences");
Taak.Schedule = Schema;
Taak.Schrijf();

Taakconsole

Verwerking met ITS, beheert geplande taken: Task Console.epf

Werken met geplande taken

Taakobjecten

Er wordt niet naar taakobjecten verwezen, maar ze worden in een speciale opslag in de database opgeslagen.

Als de "Predefined"-vlag is ingeschakeld in de metadata, wordt zo'n object automatisch gemaakt wanneer 1C:Enterprise start en bestaat het altijd in precies één instantie. Een dergelijk object kan niet worden verwijderd.

Als de vlag "Vooraf gedefinieerd" niet is ingesteld, worden de objecten van een dergelijke taak programmatisch gemaakt en verwijderd, waarbij het schema en de parameters worden gespecificeerd.

Een lijst met taken ophalen

De lijst met taken kan worden verkregen door de methode GetRegularAssignments global job manager Geplande taken

Beheerder geplande taken

GetScheduledJobs (GetScheduledJobs)

Syntaxis:

GetRegular Tasks(<Отбор>)

Parameters:

<Отбор>(optioneel)

Soort: Structuur. De structuur die de selectie definieert. Structuurwaarden kunnen zijn: UniqueIdentifier, Key, Metadata, Predefined, Usage, Name. Als de selectie niet is ingesteld, worden alle geplande taken verkregen.

Als u filtert op metagegevens, kunt u het object met de geplande taakmetagegevens of de naam ervan opgeven als de metagegevenswaarde.

Winstwaarde:

Type: array.

Beschrijving:

Haalt een reeks geplande taken op voor de opgegeven selectie. Het ontvangen van geplande taken is alleen mogelijk voor de beheerder.

Beschikbaarheid:

Voor elke regelgeving van de regelgevingscyclus
NewLine = ListRegulationTasks.Add();
NewString.Metadata = Gepland.Metadata.View();
NewLine.Name = Geplande.Naam;
NewString.Key = Geplande.Sleutel;
NewString.Schedule = Gepland.Schedule;
NewString.User = Normaal.Gebruikersnaam;
NewString.Predefined = Gepland.Voorgedefinieerd;
NewString.Usage = Regelgevend.Gebruik;
NewString.Identifier = Gepland.UniqueIdentifier;

LastTask = Gepland.LastTask;
Als LastJob ongedefinieerd is, dan
NewString.Running = LastTask.Start;
NewString.Status = LaatsteJob.Status;
Stop als;
Eindcyclus;

creatie

Gemaakt door de CreateRegularTask-methode van de geplande taakbeheerder:

ScheduledJob = ScheduledJobs.Create ScheduledJob (MetadataChoice);

Geplande taak.Naam = Naam;
ScheduledTask.Key = Sleutel;
ScheduledTask.Use = Gebruik;
ScheduledTask.UserName = Gebruikerskeuze;
ScheduledTask.Aantal herhalingen bij crashen = aantal nieuwe pogingen bij crashen;
ScheduledTask.RetryIntervalOnAccident = RetryIntervalOnAccident;
ScheduledTask.Schedule = Schema;
ScheduledTask.Write();

TaskObject = ScheduledTasks.Create ScheduledTask ("ExecuteExchange");

TaskObject.Name = Naam;
JobObject.Use = waar;

Het jobobject heeft een veld "Parameters" waarin de methodeparameters worden ingesteld:

Geplande Job

Parameters:

Gebruik:

Lezen en schrijven.

Beschrijving:

Type: array. Een reeks geplande taakparameters. Het aantal en de samenstelling van de parameters moeten overeenkomen met de parameters van de geplande taakmethode.

Beschikbaarheid:

Server, dikke client, externe verbinding.

Opmerking:

De mogelijkheid om te lezen en te schrijven is alleen beschikbaar voor de beheerder.

Verwijdering

Verwijderd door de methode Delete() van het taakobject:

ScheduledTask.Delete();

Een taakobject krijgen

  • lijst via de GetRegularTasks-methode:
    Scheduled = ScheduledTasks.Get ScheduledTasks (selectie);
  • via de FindByUniqueID-methode van de jobmanager:
    Taak = ScheduledTasks.FindBy UniqueIdentifier (UID);

[u moet zich registreren om de link te bekijken]

Concept van asynchrone programmering

Het asynchrone programmeerconcept is dat het resultaat van de functie-uitvoering niet onmiddellijk beschikbaar is, maar na enige tijd in de vorm van een asynchrone (in strijd met de normale uitvoeringsvolgorde) aanroep.

Die. Het belangrijkste idee van asynchrone programmering is om individuele methode-aanroepen te starten en ander werk parallel te blijven doen zonder te wachten tot de aanroepen zijn voltooid.

Sommige methoden, waarvan de kans op uitzonderingen geminimaliseerd is, hebben geen asynchrone benadering nodig, maar andere vereisen dit helemaal aan het begin van de ontwikkeling.

Zoals uit de grafieken blijkt, is er geen coëfficiënt van nuttige interactieve gebruikersacties in het synchrone programmeermodel, aangezien het systeem de gebruikersinterface blokkeert, terwijl in het asynchrone model de gebruiker actief in het systeem blijft werken.

Bij synchroon uitvoeren heeft een toepassing slechts één thread. Met het asynchrone programmeermodel kunt u veel parallelle threads uitvoeren en reageren op nieuwe gebruikersacties terwijl ze worden uitgevoerd. Nadat de n-thread is voltooid, geeft u het resultaat weer op het scherm.

Achtergrondtaken in 1C:Enterprise 8

In 1C:Enterprise 8 zijn achtergrondtaken ontworpen om applicatietaken asynchroon uit te voeren. Ze kunnen onderliggende achtergrondtaken voortbrengen, bijvoorbeeld om complexe berekeningen parallel te laten lopen over verschillende werkende servers van het cluster in een client-servermodus.

Het is mogelijk om de uitvoering van achtergrondtaken die dezelfde methoden hebben, te beperken volgens een bepaald applicatiekenmerk. Programmatische creatie en beheer van achtergrondtaken is mogelijk vanaf elke gebruikersverbinding met de systeeminfobase. De achtergrondtaak wordt uitgevoerd als de gebruiker die deze heeft gemaakt.

Het taakmechanisme werkt zowel in de client-server- als in de bestandsversie van werk, maar de mogelijkheden voor het beheren en uitvoeren van taken in beide versies zijn enigszins verschillend.

Client-server optie

In de client-serverversie worden taken gepland door de taakplanner, die zich fysiek in de clustermanager bevindt.

De planner controleert periodiek op verzoeken om achtergrondtaken uit te voeren. Als er taken zijn die moeten worden uitgevoerd, bepaalt de planner de minst belaste clusterwerkprocessen en wijst achtereenvolgens een taak toe aan elk van hen om uit te voeren. Zo kan dezelfde workflow mogelijk meerdere taken parallel uitvoeren. Nadat de taak door de workflow is ontvangen, maakt de workflow een verbinding met de infobase en voert de taak binnen deze verbinding uit. Nadat de taak is uitgevoerd, stelt de werkstroom de planner op de hoogte van het slagen of mislukken van de taak.

Bestandsoptie

Vanaf versie 8.3.3.641 van het platform hebben de ontwikkelaars het werk met achtergrondtaken in de bestandsversie sterk vereenvoudigd.

Voorheen vereiste automatische uitvoering van taken het starten van een aparte, extra 1C:Enterprise-sessie die als taakplanner werd gebruikt. En in deze sessie was het nodig om periodiek de methode van de ingebouwde taal uit te voeren ExecuteProcessingJobs(). Deze aanpak was nogal omslachtig, onhandig en beperkte het gebruik van achtergrond- en geplande taken in de bestandsversie van het werk ernstig.

Nu is alles veel gemakkelijker geworden. Als een thin of dikke client start, of als de webserver clientverbindingen heeft, dan start elk van deze applicaties automatisch een andere thread met een verbinding met de database. Deze threads houden zich bezig met het feit dat ze achtergrond- en geplande taken uitvoeren.

Elk van deze toepassingen voert zijn eigen achtergrondtaken uit. Als een applicatie meerdere achtergrondtaken heeft geïnitieerd, worden deze achtereenvolgens uitgevoerd, in de volgorde waarin ze zijn ontvangen.

Voor de hand liggende min 1C achtergrondbanen: aangezien ze aan de serverzijde worden uitgevoerd, is er geen mogelijkheid tot interactief werken met de gebruiker (u kunt bijvoorbeeld geen bericht of andere informatie weergeven; al deze gegevens moeten in de infobase worden opgeslagen en op een of andere manier verder worden verwerkt) .

Opgemerkt moet worden dat achtergrondtaken puur programmatische objecten zijn en niet in de database kunnen worden opgeslagen. Dat wil zeggen, we kunnen alleen een instantie van de klasse maken, de eigenschappen ervan initialiseren en uitvoeren voor uitvoering.

Een voorbeeld van asynchrone code-uitvoering in 1C:Enterprise 8

“Programma's schrijven waarin het resultaat van een functieaanroep op een onbekend tijdstip arriveert, is veel moeilijker dan gewone programma's. Geneste oproepen, foutafhandeling, controle over wat er gebeurt - alles wordt ingewikkelder, "alleen degenen die niet weten hoe ze de mogelijkheden van het platform op de juiste manier moeten gebruiken, zullen dat zeggen, maar wij niet!

Laten we alle eenvoud en elegantie van asynchrone code-uitvoering demonstreren in 1C:Enterprise 8!

Stap 1. Laten we een nieuwe IB maken voor configuratie-ontwikkeling

Stap 2 Voeg in de configuratie de algemene module "AsynchronousHandlers" toe

Waarom hebben we een gemeenschappelijke module toegevoegd? Alles is hier eenvoudig: om asynchrone bewerkingen in 1C:Enterprise 8 uit te voeren, worden achtergrondtaken gebruikt, die hun eigen manager hebben - "BackgroundTask Manager". Dit object heeft een "Run"-methode, met behulp waarvan de achtergrondtaak wordt gestart.

Laten we ons wenden tot de syntaxisassistent.

We hebben dus een gemeenschappelijke module nodig.

Stap 3 Laten we in de algemene module "AsynchronousHandlers" de exportprocedure OurDurationOperation() toevoegen

Procedure OurDurationOperation(Duur) Export // Simulatie van een continue actie (Duur sec.). OperationStartDate = HuidigeDatum(); Terwijl CurrentDate() - OperationStartDate< Длительность Цикл КонецЦикла; КонецПроцедуры

Stap 4 We voegen de verwerking "AsynchronousProgrammingConcept" toe aan de configuratie (u kunt een externe verwerking maken)

Voeg één kenmerk toe aan het formulier:

Duur (aantal)

en twee teams

Voer een lange operatie uit;

Voer een langlopende bewerking asynchroon uit.

Stap 5 Vul volgens de syntaxisassistent de formuliermodule in

&AtClient-procedure PerformLongOperation(Command) PerformLongOperationOnServer(); EndProcedure &OnServer Procedure PerformLongOperationOnServer() AsynchronousHandlers.OurLongOperation(Duur); EndProcedure &OnClient Procedure ExecuteLanglopende bewerkingAsynchronous (opdracht) ExecuteLanglopende bewerkingAsynchronouslyOnServer(); EndProcedure &AtServer-procedure PerformLong-runningOperation AsynchronouslyAtServer() Parameters = New Array; Parameters.Toevoegen (Duur); BackgroundJobs.Run ("AsynchronousHandlers.Our LongOperation", Parameters, New UniqueIdentifier, "Voorbeeld van asynchrone programmeerconcept"); EindeProcedure

Stap 6 We lanceren en controleren!

Resultaat:

Als we op de knop "Een lange bewerking uitvoeren" klikken, wordt de gebruikersinterface voor "Duur" seconden geblokkeerd;

Als we op de knop "Een langlopende bewerking asynchroon uitvoeren" klikken, wordt de gebruikersinterface niet geblokkeerd en wordt de programmacode parallel uitgevoerd.

We kunnen controleren of de programmacode asynchroon loopt door naar het logboek te kijken.

We kunnen fouten opsporen in de programmacode die op de "achtergrond" draait als we de juiste eigenschap instellen in de foutopsporingsopties.

Een voorbeeld van asynchrone code-uitvoering in 1C:Enterprise 8 met BSP

Laten we een voorbeeld bekijken van de implementatie van het asynchrone programmeerconcept in 1C:Enterprise 8 in BSP met behulp van het voorbeeld van het verwerken van Current Affairs.

De logica is als volgt: tijdens de lancering van het programma wordt de werkruimte van de startpagina geïnitialiseerd, waar u het verwerkingsformulier "Actuele zaken" kunt weergeven. Dit formulier is gevuld met de lopende zaken van de gebruiker, en het kost tijd om het in te vullen. Als ontwikkelaars niet de mogelijkheid hadden om code asynchroon uit te voeren, zou de gebruikersinterface worden geblokkeerd voor de duur van het invullen van het verwerkingsformulier!

Laten we de programmacode van het formulier analyseren.

De vormgebeurtenis "OnCreateOnServer" roept de procedure "RunBackgroundJob" aan - dit is wat we nodig hebben.

Zonder ons te laten afleiden door de nuances, analyseren we deze procedure

En hier zien we dat de achtergrondtaakmanager en zijn Execute-methode worden gebruikt. Houd er rekening mee dat ontwikkelaars een unieke taak-ID op de achtergrond bewaren.

Om dit te doen, gebruiken ontwikkelaars de methode ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>).



In een hook-procedure Pluggable_CheckJobExecution() ontwikkelaars noemen een functie Taak voltooid (taak-ID)


Deze functie controleert de uitvoering van een achtergrondtaak op ID.

Opgemerkt moet worden dat BSP gemeenschappelijke modules heeft ontwikkeld om de werking van serveractiviteiten op lange termijn te ondersteunen.

Het asynchrone concept van programmeren in 1C:Enterprise 8 verhoogt dus enigszins de complexiteit van het oplossen van problemen voor de ontwikkelaar, maar verbetert de functionaliteit van het programma aanzienlijk vanuit het oogpunt van de gebruiker.

Mortal Kombat X - het spel start niet op, geeft een zwart scherm, een foutmelding, laat het menu niet verder gaan, en God weet wat voor andere problemen. Hoe het op te lossen - in ons artikel.

Controleer voordat u begint met het oplossen van problemen of uw computer voldoet aan de systeemvereisten.

Minimale systeemvereisten:
Besturingssysteem: Windows Vista/7/8 (alleen 64-bits systemen);
Processor: Intel Core i5-750 @ 2,67 GHz of AMD Phenom II X4 965 @ 3,4 GHz;
RAM: 3GB;
Videokaart: NVIDIA GeForce GTX 460 of AMD Radeon HD 5850;
DirectX-versie: 11;
Vrije ruimte op de harde schijf: 25 GB;

Aanbevolen systeemvereisten:
Besturingssysteem: Windows 7/8 (alleen 64-bits systemen);
Processor: Intel Core i7-3770 @ 3,4 GHz of AMD FX-8350 @ 4,0 GHz;
RAM: 8GB;
Videokaart: NVIDIA GeForce GTX 660 of AMD Radeon HD 7950;
DirectX-versie: 11;
Vrije ruimte op de harde schijf: 40 GB;
Breedband internet verbinding.

Als je hardware voldoet aan de minimale eisen, dan heb je het halve werk gedaan. Controleer en update ook alle benodigde software en stuurprogramma's.

Opmerking: Als je een assembly van Windows XP / Vista / 7 / 8 / 8.1 met verschillende aanpassingen gebruikt, raden we je ten zeerste aan om deze onzin te slopen en een schone image van Microsoft te installeren. Anders kun je juist vanwege je software veel fouten krijgen, verschillende herinpakkers kunnen veel onnodige rommel in het systeem stoppen. Als je alle dingen hebt gedaan die we hierboven hebben geadviseerd, is het tijd om kennis te maken met de lijst met fouten die gebruikers het vaakst tegenkomen.

Mortal Kombat X start niet

1. Controleer of er geen Russische letters in het pad naar de spelbestanden staan;
2. Controleer of het spel voldoet aan de systeemvereisten en voer het spel ook niet uit op de ingebouwde videokaart, maar op ati / nvidia;
3. Voer het spel uit als beheerder of in compatibiliteitsmodus;
4. Uitschakelen op het moment van opstarten - antivirus;
5. Controleer of er geen Russische karakters in het pad naar het spel staan;
6. Wacht op de patch, misschien hebben de ontwikkelaars ergens geen rekening mee gehouden en zijn de problemen in de game gebleven.

Spel crasht met onbekende fout

Start de computer opnieuw op en controleer de integriteit van de cache in Steam, als de licentie dat is, of wijzig het opnieuw inpakken / installeer de nieuwste patch / update.
We doen het volgende in Steam:
1. In de eigenschappen van het spel, in de updates-sectie, moet je de achtergronddownload instellen op "altijd toestaan";
2. Ga vervolgens naar de sectie "add-ons", in dezelfde eigenschappen, en vink het vakje voor elk installatieprogramma aan;
3. Als de download niet automatisch start na het sluiten van de eigenschappen, klik dan met de rechtermuisknop op het spel (in de bibliotheek) en klik op configureren;
4. Misschien komt er de eerste twee keer een foutmelding dat het spel al draait, maar je moet doorgaan met configureren selecteren (het werkt gegarandeerd 3 keer) en de pakketten worden gedownload.

Mortal Kombat X crasht met "0xc000007b"-fout

Dit is een driver-gerelateerde fout. We werken ze bij op de officiële website van de fabrikant van uw stuurprogramma's en voeren het spel uit als beheerder.

Gamepad-problemen in Mortal Kombat X

Probeer het aan - uit te zetten in het spel zelf. Als er iets gebeurt en het begon te werken, dan werkt het. Als het niet werkt, maar het systeem ziet het, dan moet u de stuurprogramma's ervoor bijwerken. Als het daarna niet werkt, koop dan een andere joystick, want deze is niet compatibel met het spel.

Mortal Kombat X crasht in het hoofdmenu

Schakel alle programma's van derden en de gamepad, indien aangesloten, een tijdje uit. En probeer in de venstermodus te draaien.

Mortal Kombat crasht met een "D3D-fout"

Deze fout is typisch voor AMD-videokaarten. Ga naar de Steam-bibliotheek en selecteer de eigenschappen van het spel, schrijf in de opstartinstellingen de parameter: "-dxlevel 81" (zonder aanhalingstekens).

Mortal Kombat X zwart scherm

1. Werk de stuurprogramma's van uw grafische kaart bij of installeer deze opnieuw. Hoe u stuurprogramma's kunt bijwerken, vindt u in deze vraag
2. Speel het spel in een venster, en als het spel start, zet het dan op volledig scherm door op ctrl + enter te drukken (het werkt echter niet met alle spellen). De venstermodus kan ook worden ingeschakeld in de game-instellingenbestanden of door de -w-optie in de startopties in te stellen, maar dit werkt ook niet in alle games.
3. Voer het spel uit als beheerder of in compatibiliteitsmodus. En als dit je niet helpt, probeer dan het spel tegelijkertijd uit te voeren in de compatibiliteitsmodus en in de venstermodus.
4. Schakel eventueel de 2e videokaart uit
5. Schakel over van geïntegreerde grafische kaart naar Ati/Nvidia als je op een laptop speelt
6. Haal het vinkje weg bij Alleen-lezen voor alle gamebestanden. Klik met de rechtermuisknop op de gamemap en selecteer eigenschappen.

Mortal Kombat X crasht naar desktop

1. Schakel alle extra software uit die je tijdens het spel niet nodig hebt: spelers, browsers, antivirus, enz.
2. Verlaag de instellingen in het spel tot het minimum.
3. Verhoog de prioriteit van het spelproces in Taakbeheer naar Hoog
4. Start de game met een programma dat geheugen vrijmaakt Game Prelauncher of Gamebooster
5. Schakel Verticale synchronisatie in de game-instellingen (Vsync) in en als de situatie niet verbetert, zet het dan uit. Deze optie kan zowel het aantal frames verhogen als verminderen.
6. Gebruik een 64-bits besturingssysteem voor comfortabel tijdverdrijf in nieuwe games.

Werkende oplossing voor prestatieproblemen van buitenlandse vrienden

1. Apparaatbeheer openen
2. Zoek uw videokaart en verwijder uw videostuurprogramma volledig (alleen: gebruik het verwijderingsprogramma voor beeldschermstuurprogramma's)
3. Start uw computer opnieuw op
4. Ga naar de systeempartitie (C:) en verwijder de NVIDIA-map
5. Download en installeer de nieuwste nvidia-driver en controleer of physx de nieuwste versie is
6. Start uw computer opnieuw op
7. Zoek in de map met de geïnstalleerde MK X de map _CommonRedist
8. Installeer directx en beide c++-pakketten (als u een 32-bits versie gebruikt, volstaat het om alleen het x86-pakket te installeren)
9. Schakel in Taakbeheer onnodige programma's die op de achtergrond worden uitgevoerd uit
10. Start het spel
11. Ga naar de instellingen en stel de resolutie in op 1280X720, venstermodus, en schakel alle andere instellingen uit of zet ze op een minimum
12. Open geavanceerde instellingen en doe hetzelfde
13. Stel textuurkwaliteit in op medium en anisotrope filtering op 2
14. Deeltjes ingesteld op 50
15. Start het spel opnieuw - het zou in venstermodus moeten openen
16. Druk op alt+enter voor volledige schermmodus (venstermodus lost het verticale synchronisatieprobleem op, evenals modus volledig scherm op deze manier ingeschakeld
17. Verander geen grafische instellingen - probeer gewoon een kaart te starten en speel.
18. als de venstermodus niet is verschenen, maar je kunt het spelpictogram op de taakbalk zien, klik erop en druk op alt + enter;
19. verander geen grafische instellingen in deze fase - ga gewoon naar een kaart en probeer je instellingen.

Mortal Kombat X is traag, vertraagt ​​en lage FPS

Er zijn veel klachten over het feit dat de hardware krachtig is, maar tegelijkertijd loopt het spel vreselijk vast en loopt het vast. De fout is een beetje een kromme poort, van consoles tot pc. Met uitstekend werk op sommige componenten, zal het vertragen op andere met een vergelijkbaar vermogen.

Ga het spel in, minimaliseer en open vervolgens de NVidia-instellingen, daar vind je, tussen alle processen, het Mortal Kombat X-proces. Zoek en selecteer vervolgens in de tweede paragraaf de grafische processor "High-performance NVIDIA-processor". Selecteer vervolgens in de derde alinea "Verticale synchronisatiepuls" en vink het vakje aan. sla de instellingen op en start het spel opnieuw.

Schakel Anisotrope filtering in, ga in de NVidia-instellingen naar "PhysX-configuratie installeren", selecteer daar uw grafische processor (videokaart).

We verwijderen de vertragingen. Nvidia geForce-ervaring

Nvidia geForce Experience op zoek naar MCX en optimalisatie. Daarna zouden de vertragingen moeten verdwijnen.

We zullen fouten herstellen in Windows 10. Maar we zullen ongeveer hetzelfde moeten doen in Windows XP, 7 en 8. In Windows 7 en later hebben ontwikkelaars het herstelsysteem verbeterd na opstartproblemen. In oudere versies van het systeem moeten ernstige fouten vaak worden opgelost door opnieuw te installeren.

Randapparatuur uitschakelen

Probeer te onthouden welke wijzigingen u onlangs in het systeem hebt aangebracht: of u nieuwe apparaten of apparaten hebt geïnstalleerd of iets hebt gewijzigd. Misschien zit het probleem in een van de hardwarecomponenten. Probeer uit te schakelen:

  1. USB-drives.
  2. Kaartlezers.
  3. printers.
  4. Scanners.
  5. Camera's.
  6. Alle andere externe apparaten.

Als dit niet helpt, koppelt u het toetsenbord en de muis los: u moet alle mogelijke oorzaken van het probleem elimineren.

Interne componenten zoals RAM kunnen ook de oorzaak zijn. Op een desktop-pc kunt u de prestaties van het RAM-geheugen controleren door de beugels één voor één aan te sluiten.

Controleer voeding

Als de computer helemaal niet aan gaat, let dan op het netsnoer en de stopcontacten. Vergeet de aan/uit-schakelaar op de achterkant van de desktopbehuizing niet.

Als alles op dit niveau werkt, maar de computer nog steeds niet wordt ingeschakeld, zit het probleem hoogstwaarschijnlijk in de voeding, die u waarschijnlijk niet zelf kunt oplossen: u moet deze vervangen of repareren door een specialist.

Het is mogelijk dat de computer wordt ingeschakeld, maar slechts voor een korte tijd. Hetzelfde probleem met de voeding.

Een schijf instellen om het systeem op te starten

Er kunnen fouten optreden tijdens het opstarten: Er is geen besturingssysteem gevonden. Probeer alle schijven die geen besturingssysteem bevatten los te koppelen. Druk op Ctrl+Alt+Del om opnieuw op te starten of opstart-fout. Start opnieuw op en selecteer het juiste opstartapparaat of plaats opstartmedia in het geselecteerde opstartapparaat.

De BIOS- of UEFI-instellingen zijn mogelijk ingesteld om op te starten vanaf een extern apparaat of een andere logische partitie, en niet vanaf de systeemschijf. U kunt de standaardinstellingen als volgt herstellen:

  1. Om een ​​computer opnieuw op te starten.
  2. Druk direct na het opnieuw opstarten op de systeemtoets, bijvoorbeeld F2. Dit kan een andere sleutel zijn: meestal staat deze tijdens het opstarten van het systeem onderaan het scherm met het logo van de fabrikant van de laptop of het moederbord.
  3. Stel in de instellingen de gewenste schijf in op de eerste plaats in de opstart.
  4. Selecteer de optie Opslaan en afsluiten om uw wijzigingen op te slaan.

Als het bovenstaande niet heeft geholpen, moet u de systeem-bootloader herstellen. Hiervoor heb je een opstartbare USB-stick of herstelschijf nodig met een systeem dat qua bitdiepte geschikt is. Hoe u een opstartbare USB-flashdrive of -schijf kunt maken, lees Lifehacker over het installeren van Windows.

Start het systeem vanaf een USB-flashstation of schijf door de gewenste optie in het opstartmenu te selecteren. Selecteer Systeemherstel in het Windows-installatiemenu dat wordt geopend.

Selecteer in het herstelmenu Problemen oplossen → Geavanceerde opties → Opstartherstel. Daarna zal het systeem proberen de bootloader automatisch te repareren. In de meeste gevallen lost het het probleem op.

Hetzelfde kan handmatig worden gedaan via de opdrachtregel, maar het is beter om de automatische optie te kiezen om de situatie niet te verergeren.

Als deze methode niet heeft geholpen, ligt het probleem waarschijnlijk in de hardware: de harde schijf is beschadigd.

Selecteer in het herstelmenu Problemen oplossen → Geavanceerde opties → Opdrachtprompt.

Op de opdrachtregel moet u de opdrachten één voor één invoeren: diskpart → list volume (onthoud de naam van de schijf met Windows) → exit.

Om de schijf op fouten en corruptie te controleren, typt u chkdsk X: /r (waarbij X de naam is van de Windows-schijf). De controle duurt meestal lang, je moet wachten.

Windows starten in de veilige modus

Door een plotselinge uitschakeling van de computer tijdens de installatie van updates van het besturingssysteem, het opschonen van virussen en onnodige vermeldingen in het register, of door de fout van hulpprogramma's om Windows te versnellen, kunnen systeembestanden beschadigd raken. In dit geval zal het blauwe scherm van de dood verschijnen wanneer het systeem opstart.

Probeer Windows in de veilige modus te starten zonder stuurprogramma's en programma's in autorun te laden. Als de computer in deze modus werkt, moet u de stuurprogramma's verwijderen, een systeemherstel uitvoeren en op virussen scannen.

Als u herstelpunten heeft, is dit probleem vrij eenvoudig op te lossen. U hoeft alleen maar terug te gaan naar de vorige stabiele configuratie.

Systeembestanden opnieuw installeren

De bovenstaande stappen helpen mogelijk niet. Vervolgens moet u de Windows-instellingen opnieuw instellen en het systeem opnieuw installeren terwijl u de bestanden opslaat. Helaas moeten alle programma's opnieuw worden geïnstalleerd.

Selecteer in de herstelomgeving Problemen oplossen → Deze pc opnieuw instellen → Mijn bestanden behouden → Opnieuw instellen.

Het systeem keert terug naar de oorspronkelijke instellingen.