खोज…


वाक्य - विन्यास

  • Bukkit.getScheduler().scheduleSyncRepeatingTask(Plugin plugin, Runnable task, int initialDelay, int repeatingDelay)
  • Bukkit.getScheduler().scheduleSyncDelayedTask(Plugin plugin, Runnable task, int initialDelay)
  • Bukkit.getScheduler().runTaskAsynchronously(Plugin plugin, Runnable task)
  • Bukkit.getScheduler().runTask(Plugin plugin, Runnable task)
  • new BukkitRunnable() { @Override public void run() { /* CODE */ } }.runTaskLater(Plugin plugin, long delay);
  • new BukkitRunnable() { @Override public void run() { /* CODE */ } }.runTaskTimer(Plugin plugin, long initialDelay, long repeatingDelay);

टिप्पणियों

कुछ बुक्कट एपीआई तरीके थ्रेड-सुरक्षित हैं और इसे अतुल्यकालिक रूप से कहा जा सकता है। इस कारण से, बुक्कट एपीआई विधियों को केवल कुछ अपवादों के साथ मुख्य धागे पर चलाया जाना चाहिए।

संहिता रन के अंदर scheduleSync तरीकों, साथ ही runTask विधि मुख्य थ्रेड पर चलाया जाएगा।

runTaskAsynchronously अंदर कोड रन मुख्य धागे से एसिंक्रोनस रूप से चलाया जाएगा। अतुल्यकालिक विधियां बड़े गणित या डेटाबेस संचालन के लिए बहुत उपयोगी होती हैं, बिना सर्वर के पिछड़ने के कारण, फिर भी अपरिभाषित व्यवहार का कारण बनती हैं यदि बुक्कट एपीआई विधियों का उपयोग किया जाता है। इस कारण से, अतुल्यकालिक कोड के बाद चलने वाले runTask एपीआई तरीकों को हमेशा एक runTask विधि में रखा जाना चाहिए।

समयबद्धन कार्य दोहराना

समयबद्धक कार्य के लिए समय को टिक्स में मापा जाता है। सामान्य परिस्थितियों में, प्रति सेकंड 20 टिक होते हैं।

मुख्य थ्रेड पर .scheduleSyncRepeatingTask साथ शेड्यूल किए गए कार्य .scheduleSyncRepeatingTask जाएंगे

Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
    @Override
    public void run() {
        Bukkit.broadcastMessage("This message is shown immediately and then repeated every second");
    }
}, 0L, 20L); //0 Tick initial delay, 20 Tick (1 Second) between repeats

अनुसूचक विलंबित कार्य

समयबद्धक कार्य के लिए समय को टिक्स में मापा जाता है। सामान्य परिस्थितियों में, प्रति सेकंड 20 टिक होते हैं।

.scheduleSyncDelayedTask साथ शेड्यूल किए गए कार्य मुख्य थ्रेड पर चलाए जाएंगे

Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
    @Override
    public void run() {
        Bukkit.broadcastMessage("This message is shown after one second");
    }
}, 20L); //20 Tick (1 Second) delay before run() is called

असिंक्रोनस रूप से रनिंग टास्क

आप runTaskAsynchronously का उपयोग करके मुख्य धागे से एसिंक्रोनस रूप से कोड रन बना सकते हैं। यह गहन गणित या डेटाबेस संचालन करने के लिए उपयोगी है, क्योंकि वे मुख्य थ्रेड को ठंड (और सर्वर को लैगिंग से) से रोकेंगे।

कुछ बुक्कट एपीआई तरीके थ्रेड-सुरक्षित होते हैं, इसलिए यदि मुख्य धागे से एसिंक्रोनसली कहा जाए तो कई अपरिभाषित व्यवहार का कारण बनेंगे।

Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
    @Override
    public void run() {
        Bukkit.getLogger().info("This message was printed to the console asynchronously");
        //Bukkit.broadcastMessage is not thread-safe
    }
});

मेन थ्रेड पर रनिंग टास्क

आप runTask का उपयोग करके मुख्य थ्रेड के साथ समकालिक रूप से कोड रन भी बना सकते हैं। यह उपयोगी है जब आप मुख्य धागे से एसिंक्रोनस रूप से कोड चलाने के बाद बुककैट एपीआई तरीकों को कॉल करना चाहते हैं।

इस Runnable के अंदर नामक कोड को मुख्य थ्रेड पर निष्पादित किया जाएगा, जिससे बुककिट एपीआई तरीकों को कॉल करना सुरक्षित होगा।

Bukkit.getScheduler().runTask(plugin, new Runnable() {
    @Override
    public void run() {
        Bukkit.broadcastMessage("This message is displayed to the server on the main thread");
        //Bukkit.broadcastMessage is thread-safe
    }
});

एक बुककिटुन्नेबल चल रहा है

द बुककटररेंबल एक रननेबल है जो बुककिट में पाया जाता है। किसी कार्य को सीधे बुककंट्रीबल से शेड्यूल करना संभव है, और इसे अपने अंदर से रद्द भी करना है।

महत्वपूर्ण: कार्यों पर समय को टिक्स में मापा जाता है। एक सेकंड में 20 टिक होते हैं।

गैर RepeatingTask:

JavaPlugin plugin;    //Your plugin instance    
Long timeInSeconds = 10;
Long timeInTicks = 20 * timeInSeconds;
new BukkitRunnable() {
        
    @Override
    public void run() {
        //The code inside will be executed in {timeInTicks} ticks.
        
    }
}.runTaskLater(plugin, timeInTicks);   // Your plugin instance, the time to be delayed.

दोहराए जाने वाला कार्य:

JavaPlugin plugin;    //Your plugin instance    
Long timeInSeconds = 10;
Long timeInTicks = 20 * timeInSeconds;
new BukkitRunnable() {
        
    @Override
    public void run() {
        //The code inside will be executed in {timeInTicks} ticks.
       //After that, it'll be re-executed every {timeInTicks} ticks;
      //Task can also cancel itself from running, if you want to.

       if (boolean) {
           this.cancel();
       }
        
    }
}.runTaskTimer(plugin, timeInTicks, timeInTicks);   //Your plugin instance, 
                                                   //the time to wait until first execution,
                                                  //the time inbetween executions.

एक अतुल्यकालिक टास्क से थ्रेड सेफ कोड चलाना

कभी-कभी आपको एक अतुल्यकालिक कार्य के भीतर से सिंक्रोनस कोड निष्पादित करने की आवश्यकता होगी। ऐसा करने के लिए, बस एसिंक्रोनस ब्लॉक के भीतर से एक तुल्यकालिक कार्य शेड्यूल करें।

Bukkit.getScheduler().runTaskTimerAsynchronously(VoidFlame.getPlugin(), () -> {

    Bukkit.getScheduler().runTask(VoidFlame.getPlugin(), () -> {
        World world = Bukkit.getWorld("world");
        world.spawnEntity(new Location(world, 0, 100, 0), EntityType.PRIMED_TNT);
    });

}, 0L, 20L);


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow