THE ORB
Uruchamiam studio

Zawieszenie wątku / zasób zajmuje za dużo czasu

Jeden skrypt zatrzymał wszystko. W przeciwieństwie do zwykłego przycięcia ten wymienia odpowiedzialny zasób.

groupsPrzycięcia i skoki lagówcodePotrzebny programista

Zrób najpierw to

Zanotuj zasób, który wymienia — tam jest problem.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

Wątek skryptu nie oddał sterowania wtedy, kiedy scheduler tego oczekiwał. Wszystko inne po tej stronie czeka. Podobnie jak hitch warning to objaw, a nie awaria, ale zawieszenie zwykle wskazuje na jeden konkretny kawałek kodu, a nie na ogólne obciążenie.

Co to powoduje

Uszeregowane według tego, jak często są odpowiedzią.

  1. 1

    Pętla bez Waita

    Klasyk. while true do end nigdy nie oddaje sterowania.

  2. 2

    Blokujące await wewnątrz ticka

    MySQL.query.await albo Citizen.Await wewnątrz wątku wykonującego się w każdej klatce.

  3. 3

    Ogromna operacja synchroniczna

    Kodowanie albo dekodowanie bardzo dużego JSON-a lub iterowanie po tablicy z setkami tysięcy wpisów, wszystko naraz.

  4. 4

    Pętla while, której warunek nigdy nie zostaje spełniony

    while not HasModelLoaded(m) do Wait(0) end dla modelu, który nie istnieje, kręci się w nieskończoność. Każde takie czekanie potrzebuje terminu.

  5. 5

    Rekurencja bez przypadku bazowego

    Rzadkie, ale wygląda dokładnie tak samo.

Jak poznać, który jest twój

Komunikat nazywa zasób. W jego środku poszukaj while i for bez Wait oraz każdego .await wewnątrz CreateThread.

Gdzie szukać

Każda pętla w nazwanym zasobie.

Jak to naprawić

Daj każdemu czekaniu termin i oddawaj sterowanie w każdej pętli:

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

Rozbij bardzo dużą pracę na klatki:

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

Wciąż utknąłeś na własnym kodzie?

Ta strona mówi, co ten błąd zwykle oznacza. Wklej swoją konsolę do Server Fixera, a uszereguje wszystko, co w niej jest, i powie, co zrobić najpierw; a jeśli wolisz tego nie ruszać, ORBIE naprawi skrypt i odda ci zasób gotowy do wrzucenia.

bug_reportOtwórz Server Fixer

Dla tego rodzaju błędu Script Optimizer znajduje to, co kosztuje cię klatki, i przepisuje.

Błędy, które chodzą z tym w parze