我在Java中編寫了一個簡單的代碼,它使用Robot類根據某些條件移動鼠標。如何防止Java程序在其他應用程序運行時滯後?
儘管代碼運行良好,但其他應用程序運行時似乎存在「延遲」。
我認爲Java在發佈系統消息時存在一些問題。
是否有避免此問題的解決方法?
我在Java中編寫了一個簡單的代碼,它使用Robot類根據某些條件移動鼠標。如何防止Java程序在其他應用程序運行時滯後?
儘管代碼運行良好,但其他應用程序運行時似乎存在「延遲」。
我認爲Java在發佈系統消息時存在一些問題。
是否有避免此問題的解決方法?
在開始考慮減少延遲之前,您必須先了解它的原因。我會以一種可以理解「爲什麼」以及「做什麼」的方式來呈現答案。
通過你的描述,當其他程序與你的機器人一起運行的滯後只發生,對於滯後的最可能的原因是:
系統資源的缺乏 - 有太多的東西在跑同時,消耗太多的內存/處理能力,從而使操作系統放慢某些程序以便能夠運行其他程序。
怎麼辦:要嘗試解決這些問題,可以嘗試優化代碼,使其使用更少的內存/處理能力,從而減少滯後的原因,同時明顯減少延遲本身。令人遺憾的是,對於任何第三方程序來說,很難合法地做到這一點,所以如果併發應用程序不是你的,那麼滯後幾乎不能完全消除。需要通過使用不能被一個以上的過程在一個時間被訪問並且不能被克隆到多個實例的一個或多個部件 -
關於不可複製的,不可共享的部件併發不止一個正在運行的進程。當一個進程控制它時,任何其他進程別無選擇,只能等待組件被釋放。
怎麼辦:在這種情況下,幾乎是其他比減少併發進程的優先級,同時增加你的(有效減緩下來,以便你的程序的運行速度),或將其關閉任何法律方法完全。
怎麼做:要提高進程的優先級,這是設置在80%的代碼(默認值通常爲50%),插圖爲您main()
:
Thread.currentThread().setPriority((int)(Thread.MAX_PRIORITY*0.8));
注意:你可以將你的過程設置爲「永不」放掉它所需要的任何組件,使用Thread.MAX_PRIORITY
而不乘以0.8
,但這是非推薦,因爲它幾乎會暫停任何需要組件的進程(準同樣關閉它們當你的跑步時),如果喲你的程序不管什麼原因都會掛起,因爲那些組件永遠不會被釋放。
到目前爲止你做了什麼('code')? – dacwe 2011-03-08 14:21:35
您可以更改java.exe進程的操作系統優先級嗎? – JustinKSU 2011-11-02 18:22:31