THE ORB
Démarrage du studio

Thread bloqué / une ressource prend trop de temps

Un script a tout retenu. Contrairement à un à-coup général, celui-ci nomme la ressource responsable.

groupsÀ-coups et pics de lagcodeIl faut un développeur

Faites d'abord ceci

Notez la ressource qu'il nomme : c'est là qu'est le problème.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

Un thread de script n'a pas rendu la main quand l'ordonnanceur l'attendait. Tout le reste de ce côté attend. Comme l'avertissement d'à-coup, c'est un symptôme et non une panne, mais un blocage désigne en général un morceau de code précis plutôt que la charge générale.

Ce qui la provoque

Classé par fréquence : la cause la plus probable en premier.

  1. 1

    Une boucle sans Wait

    Le classique. while true do end ne rend jamais la main.

  2. 2

    Un await bloquant dans un tick

    MySQL.query.await ou Citizen.Await dans un thread qui s'exécute à chaque image.

  3. 3

    Une énorme opération synchrone

    Encoder ou décoder un très gros JSON, ou parcourir une table de centaines de milliers d'entrées, d'un seul coup.

  4. 4

    Une boucle while dont la condition n'est jamais satisfaite

    while not HasModelLoaded(m) do Wait(0) end pour un modèle inexistant tourne indéfiniment. Toute attente de ce type a besoin d'une échéance.

  5. 5

    Une récursion sans cas de base

    Rare, mais cela se présente exactement comme ceci.

Comment savoir laquelle est la vôtre

Le message nomme la ressource. À l'intérieur, cherchez les while et for sans Wait, et tout .await à l'intérieur d'un CreateThread.

Où regarder

Chaque boucle de la ressource nommée.

Comment la corriger

Donnez une échéance à chaque attente, et rendez la main dans chaque boucle :

local deadline = GetGameTimer() + 5000
while not HasModelLoaded(model) and GetGameTimer() < deadline do
    Wait(0)
end
if not HasModelLoaded(model) then return end

Et étalez le très gros travail sur plusieurs images :

for i = 1, #huge do
    process(huge[i])
    if i % 500 == 0 then Wait(0) end
end

Toujours bloqué sur votre propre code ?

Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.

bug_reportOuvrir le Server Fixer

Pour ce type d'erreur, le Script Optimizer trouve ce qui vous coûte des images et le réécrit.

Les erreurs qui voyagent avec celle-ci