2011-12-21 33 views
11

Bir süre döngüsünü bir saniye gecikmeye (sadece bir küçük döngü) aktardığı tüm kodu/bilgisayarı yavaşlatmadan bir süre döngüsünü 1 saniyelik aralıklarla nasıl geciktirebilirim?Java Gecikmesi/Bekleyin

+0

_without benim Minecraft eklenti için 1 saniye aralıklarla bu süre döngü geciktirmek için çalışıyorum @JigarJoshi bu –

+0

ayrıntılı code_ bütününü yavaşlatan. Ancak bekletme yöntemlerinin çoğu, tüm döngüleri –

+0

döngüsünden ziyade tüm süre boyunca durdurur, while döngüsünü sabit bir süre boyunca yürütmeyi ve sonra tekrar sabit gecikme olmasını istersiniz. –

cevap

24

Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)

+0

Bu, tüm komut dosyasını/bilgisayarı duraklatmıyor mu? –

+2

Bu, yalnızca bu kodun çalıştığı belirli iş parçacığını duraklatır. Bilgisayarınız donmayacak –

11

Döngü'niz Ana iş parçacığı üzerinde çalışır ve bu iş parçacığı üzerinde sleep yaparsanız, uygulamayı duraklatacaktır (yalnızca duraklatılmış bir iş parçacığı olduğu için), bunun üstesinden gelmek için bu kodu yeni Thread'a koyabilirsiniz. Jigar bağımsız diğer Threadlar çalışabilir çalışmaları, uyku vb yapmak için başka Konuyu kullanabilirsiniz dile getirdiği gibi paralel

try{ 

    Thread.sleep(1000); 
}catch(InterruptedException ex){ 
    //do stuff 
} 
+0

mükemmel çalışıyor – ERJAN

1

çalışır. java.util.Timer sınıfı, çok iş parçacıklı programlamaya girmenize gerek kalmadan sizin için periyodik görevler yürütebileceğinden size yardımcı olabilir.

2

Bir döngüyü geciktirmenin basit yolları.

Yığınlama akışının standartlarını takip etmedikten sonra kodları buraya koydum.

//1st way: Thread.sleep : Less efficient compared to 2nd 
try { 
    while (true) {//Or any Loops 
    //Do Something 
    Thread.sleep(sleeptime);//Sample: Thread.sleep(1000); 1 second sleep 
    } 
} catch (InterruptedException ex) { 
    //SomeFishCatching 
} 
//================================== Thread.sleep 


//2nd way: Object lock waiting = Most efficient due to Object level Sync. 
Object obj = new Object(); 
try { 
    synchronized (obj) { 
    while (true) {//Or any Loops 
    //Do Something 
    obj.wait(sleeptime);//Sample obj.wait(1000); 1 second sleep 
    } 
    } 
} catch (InterruptedException ex) { 
    //SomeFishCatching 
} 
//=============================== Object lock waiting 

//3rd way: Loop waiting = less efficient but most accurate than the two. 
long expectedtime = System.currentTimeMillis(); 
while (true) {//Or any Loops 
    while(System.currentTimeMillis() < expectedtime){ 
    //Empty Loop 
    } 
    expectedtime += sleeptime;//Sample expectedtime += 1000; 1 second sleep 
    //Do Something 
} 
//===================================== Loop waiting 
+0

Üçüncü yoldan hoşlanıyorum çünkü bütün bir cpu çekirdeğini engelleyebilir ve kimse buna kod kokusu diyemez. – Tom