THE ORB
Arrancando el studio

Hilo bloqueado / un recurso está tardando demasiado

Un script frenó todo lo demás. A diferencia de un tirón general, este nombra al recurso responsable.

groupsTirones y picos de lagcodeNecesita un desarrollador

Haz esto primero

Anota el recurso que nombra: ahí está el problema.

bug_reportMejor pega tu consola entera

Qué significa

Un hilo de script no cedió el control cuando el planificador lo esperaba. Todo lo demás de ese lado espera. Como el aviso de tirón, esto es un síntoma y no un fallo, pero un bloqueo suele señalar un trozo de código concreto en vez de la carga general.

Qué lo provoca

Ordenado por la frecuencia con la que es la respuesta.

  1. 1

    Un bucle sin Wait

    El clásico. while true do end no devuelve el control nunca.

  2. 2

    Un await bloqueante dentro de un tick

    MySQL.query.await o Citizen.Await dentro de un hilo que se ejecuta en cada fotograma.

  3. 3

    Una operación síncrona enorme

    Codificar o decodificar un JSON muy grande, o recorrer una tabla de cientos de miles de entradas, de una sola vez.

  4. 4

    Un bucle while cuya condición no se cumple nunca

    while not HasModelLoaded(m) do Wait(0) end para un modelo que no existe gira para siempre. Toda espera así necesita un plazo.

  5. 5

    Recursión sin caso base

    Raro, pero se presenta exactamente así.

Cómo saber cuál es el tuyo

El mensaje nombra el recurso. Adentro, buscá while y for sin un Wait, y cualquier .await dentro de un CreateThread.

Dónde mirar

Cada bucle del recurso que nombra.

Cómo arreglarlo

Poné un plazo a cada espera, y cedé el control en cada bucle:

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

Y partí el trabajo muy grande entre fotogramas:

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

¿Sigues atascado en tu propio código?

Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.

bug_reportAbrir el Server Fixer

Para este tipo de error, el Script Optimizer encuentra qué te está costando fotogramas y lo reescribe.

Errores que viajan con este