Kod planlaması, kodun belli bir eylem veya döngü sonra yürütülmesini sağlamak veya kodu belirli bir süre için geciklemek gibi birçok durumda yararlıdır. task kodunı yönetmek ve planlamasını optimize etmek için <
Sıradan Yöntemler
Aşağıdakiler, kodu planlamak için kullanılan en yaygın task yöntemleridir. İşlem yöntemleri, geleneksel yöntemlerden, örneğin wait() , kodun işlevsel olarak çalışmasını garanti etmek için kullanılmalıdır.
Aşağıdaki tablo, ilgili miras global yöntemlerini ve tercih edilen, daha optimize edilmiş karşılıklarını listeler:
| Miras Global Metodları | Görev Metodları | Ekstra Alternatifler | | : | | wait() | task.wait() | RunService.Heartbeat | 1> spawn(f(uv1,
görev.spawn
task.spawn() bir başlık veya işlev alır ve onu motorun yeniden planlayıcısından derhal yeniden başlatır ile. Ekstra argeler başlık veya işlev alınan başlatıcıyla verilir.
Aşağıdaki kod örneği, bir dizi nesneyi işleyerek while döngüsünde çalıştığınızda bir işlevi nasıl kullanacağınızı gösteriyor:
local function playerAdded(player)
...
(yield)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end
görev.fert
task.defer() bir başlık veya işlev alır ve önümüzdeki yeniden başlatma döngüsü nerede, motorun planlayıcıyla yeniden başlatılmasıyla sona erer. Ek argeler başlık veya işlev başlatıcına verilir.
Genellikle bunu task.spawn() gibi benzer bir davranış istediğinizde kullanmalısınız, ancak şu anda çalışan threadi önemli değil. Aşağıdaki kod örneği, print() ifadesinin "A" için nasıl gecikmiş olaca
task.defer(print, "A")print("B")--> B--> A
görev.gecikme
task.delay() bir thread veya işlevi alır ve bir sonraki Class.RunService.Heartbeat|Heartbeat adımında yeniden başlatmak için planlanır. İşlemci, verilen süreden sonra için için için için için için için için için için için için için için için için için iç
Gerçek gecikme süresi değişebildiğinden, aşağıdaki kod örneği, mevcut zamanı bir argüman olarak geçerek nasıl hesaplayabileceğinizi gösterir:
task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())
Zero'nin bir ömrü, bir sonraki adımda gelen işlem için işlemi devralacaktır.
bekleme.görev
task.wait() şu andaki işlemciyi (saniye olarak) elapsedikten sonra işlemciyi yeniden başlatır ve sonra Heartbeat adımında devam eder.
Aslında toplama süresi değişebilir. Aşağıdaki kod örneği, bu yöntemin便利ğini gösterir:
Aslındaki gecikme süresi değişebildiğinden, aşağıdaki kod örneği, yöntemin dönüş değerini depolayarak gerçek zamanı nasıl alacağınızı gösterir:
local elapsedTime = task.wait(2) -- 2 saniye bekleprint(elapsedTime) --> 2.0792941
Eğer herhangi bir süre verilmezse, süre varsayılır olacaktır ve bu, işlemciyi bir sonraki adımda otomatik olarak yeniden başlatacaktır. Bu, task.wait() ile davranış olarak eşdeğerdir.