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.
Faites d'abord ceci
Notez la ressource qu'il nomme : c'est là qu'est le problème.
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
Une boucle sans Wait
Le classique.
while true do endne rend jamais la main. - 2
Un await bloquant dans un tick
MySQL.query.awaitouCitizen.Awaitdans un thread qui s'exécute à chaque image. - 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
Une boucle while dont la condition n'est jamais satisfaite
while not HasModelLoaded(m) do Wait(0) endpour un modèle inexistant tourne indéfiniment. Toute attente de ce type a besoin d'une échéance. - 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 endEt é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
endToujours 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 FixerPour ce type d'erreur, le Script Optimizer trouve ce qui vous coûte des images et le réécrit.