THE ORB
Iniciando o studio

Thread travada / um resource está demorando demais

Um script travou todo o resto. Diferente de um engasgo geral, esse nomeia o resource responsável.

groupsEngasgos e picos de lagcodePrecisa de um desenvolvedor

Faça isto primeiro

Anote o resource que ele nomeia: é ali que está o problema.

bug_reportMelhor colar o console inteiro

O que significa

Uma thread de script não cedeu o controle quando o escalonador esperava. Todo o resto daquele lado espera. Como o aviso de engasgo, isso é um sintoma e não uma falha, mas um travamento costuma apontar para um pedaço de código específico em vez da carga geral.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    Um laço sem Wait

    O clássico. while true do end nunca devolve o controle.

  2. 2

    Um await bloqueante dentro de um tick

    MySQL.query.await ou Citizen.Await dentro de uma thread que roda a cada quadro.

  3. 3

    Uma operação síncrona enorme

    Codificar ou decodificar um JSON muito grande, ou percorrer uma tabela de centenas de milhares de entradas, de uma vez só.

  4. 4

    Um laço while cuja condição nunca se cumpre

    while not HasModelLoaded(m) do Wait(0) end para um modelo que não existe gira para sempre. Toda espera dessas precisa de um prazo.

  5. 5

    Recursão sem caso base

    Raro, mas se apresenta exatamente assim.

Como saber qual é o seu

A mensagem nomeia o resource. Dentro dele, procure while e for sem um Wait, e qualquer .await dentro de um CreateThread.

Onde olhar

Cada laço do resource que ele nomeia.

Como consertar

Ponha um prazo em cada espera, e ceda o controle em cada laço:

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

E divida o trabalho muito grande entre quadros:

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

Ainda travado no seu próprio código?

Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.

bug_reportAbrir o Server Fixer

Para esse tipo de erro, o Script Optimizer encontra o que está custando quadros e reescreve.

Erros que andam junto com este