我有一个可运行的类,它使用无限循环的无限方法在运行方法中连续执行操作.有时用户可能想暂停/恢复操作.什么是暂停线程的最佳方法.我有两个想法: 首先 class Foo extends Runnable { @Override public void run() { while(true) { if(pauseFlag) try{ Thread.sleep(); } catch(InterrruptedException ie) {//...} } } 第二 class Foo extends Runnable { @Override public void run() { while(true) { //pause if user wants to pause whil
以下是关于 thread-sleep 的编程技术问答
为了个人练习,我正在用Java重新拍摄桌面,我设法获得了所有支柱,屏幕,BG移动完成,但是现在我有一个问题,这就是性能. 有时我会觉得游戏的移动不会那么快,有时会被卡住0.5秒或其他东西,但事实并非如此,当我移动鸟时,它的移动有些怪异,看起来它的移动太多了向后前进,然后以MP4格式观看GIF: http:///gyazo 是什么造成的?这可以是我的游戏循环还是我绘制图形的方式?我不使用双重缓冲,我只需渲染. 游戏循环: private void gameLoop() { new Thread() { private long last; private long start; private int wait; public void run() { while(game) { long now = System.nanoTime();
我想创建一个小应用程序.在我的应用程序中,我有jLabel1和Jbutton1.我想使用jButton单击从一侧到另一侧的动画jLabel1.我不知道如何在jButton1ActionPerformed中调用来创建jLabel1的动画.我做了一个如下所提供的油漆应用代码. 这是我的代码: public void paint(Graphics g) { super.paint(g); Graphics2D g2=(Graphics2D)g; g2.drawString("ancd", x, y); try { Thread.sleep(10000); } catch (Exception e) { System.out.println(""+e); } x+=10; if(x>this.getWidth()) { x=0;
我试图绘制背景图像,然后在其上绘制一个字符.我的代码一直在工作,直到我添加睡眠,我没有得到1500 fps. package sylvyrfysh.screen; import javax.swing.*; import java.awt.*; import game.infos.Information; public class ImageLoadDraw extends JFrame{ /** * */ private static final long serialVersionUID = 1L; public static void main(){ DisplayMode dm=new DisplayMode(Information.sX,Information.sY,16,DisplayMode.REFRESH_RATE_UNKNOWN); ImageLoadDraw i = new ImageLoadDraw(); i.run(dm);
我有一些代码,可以在Java中创建全屏图标,并将背景颜色设置为粉红色,前景颜色为红色.但是,每次我运行它时,它永远不会将背景颜色更改为红色,而只是保持它的浏览.我将代码放在下面. 主爪哇: import java.awt.*; import javax.swing.*; @SuppressWarnings({ "serial" }) public class bob extends JFrame{ public static void main(String[] args) { DisplayMode dm = new DisplayMode(800,600,16, DisplayMode.REFRESH_RATE_UNKNOWN); bob b = new bob(); b.run(dm); } public void run(DisplayMode dm){ setBackground(Color.PINK); se
我正在制作Android游戏,目前没有得到我想要的表演.我在自己的线程中有一个游戏循环,可以更新对象的位置.渲染线将穿越这些对象并绘制它们.当前的行为似乎是波动/不均匀的运动.我无法解释的是,在将更新逻辑放在其自己的线程中之前,我将其以on DrawdFrame方法(在GL调用之前)使用.在这种情况下,动画非常顺利,只有当我尝试通过Thread.sleep节气循环时,它才会变得波动/不合格.即使我允许更新线程发脾气(无睡觉),动画也很顺利,只有当涉及螺纹时,它也会影响动画的质量. 我已经创建了一个骨架项目,以查看是否可以重新创建问题,以下是渲染器中的更新循环和ondrawframe方法: 更新循环 @Override public void run() { while(gameOn) { long currentRun = SystemClock.uptimeMillis(); if(lastRun == 0)
所以我已经写了以下功能来表明我的意思: use std::{thread, time}; const TARGET_FPS: u64 = 60; fn main() { let mut frames = 0; let target_ft = time::Duration::from_micros(1000000 / TARGET_FPS); println!("target frame time: {:?}",target_ft); let mut time_slept = time::Duration::from_micros(0); let start = time::Instant::now(); loop { let frame_time = time::Instant::now(); frames+=1; if frames == 60 { bre
我一直在Java 8中的2D图形上进行教程,当时Netbeans给我一个暗示,Thread.Sleep会影响性能.但是,尽管我能够找到几种更好的方法,但我无法找到一种方法来包含它们而不会弄乱您的代码. package platformer; import java.awt.*; import javax.swing.*; import java.util.Scanner; @SuppressWarnings("serial") public class Platformer extends JPanel { int x = 0;//Sets the starting coords. of the ball int y = 0; private void moveBall() {//How much the ball moves by x = x+1; y = y+1; } @Override p
当按下按钮以将imageicon设置为特定图像时,我正在尝试设置延迟,然后设置另一个延迟,以便将所有图像设置为单击. 换句话说: 单击一个按钮 - >设置图像 - >延迟 - >设置另一个图像. 我在代码中获得的是最后一个状态"设置另一个图像". 我也不想使用计时器,我想使用延迟. 以及我关注的代码中的一部分. btnNewButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { lblNewLabel.setIcon(and); sleeep(500); lblNewLabel.setIcon(app); } }); 这是延迟函数 void sleeep(int n) { try { Thread.sleep(n); } cat
我正在使用VisualVM监视我的JBOSS实例.我已经附上了它的屏幕截图. 问题是在我重新启动JBOSS实例之后,OS上的CPU开始升高.负载可以高达40,而Top Command中的Java进程显示最多300%. 然后继续放慢前端的应用程序. VisualVM显示CPU很高,线程计数也在增加. 我该如何进一步解决此根本原因? Visual VM输出 - 常规 解决方案 当涉及高CPU使用情况时,我通常会寻找两件事: 经常消耗CPU的GC 线程消耗CPU 进一步诊断#1,启用GC记录可能是最好的方法.但是,您也可以使用JSTAT: JSTAT -GC PID 60S 上面的命令将每60年代从JVM收集内存使用情况和垃圾收集详细信息.在调试环境中,60年代应该可以,但是在生产环境中,3600应该足够. JSTAT重量很小,不会产生任何不利影响.输出将帮助您了解是否有频繁的GC(专业/次要).经常出现的主要集合是一个问题(它暂
我的应用程序中有很多线程,我如何停止从它们的一个线程?如果我使用Thread.Sleep()它停止了整个应用程序,我只想停止一个线程.我怎么做?我正在使用C#. 解决方案 使用Thread.Sleep()时,您只停止线程,该线程称为此方法.如果您的主线程(即UI线程)调用Thread.Sleep(),则应用程序冻结(实际上其他线程继续工作,但UI未刷新).因此,如果您想停止一些线程,则: 它不应该是主线程 只需在该线程上调用Thread.Sleep() 示例(假设此代码在主线程上执行): ThreadPool.QueueUserWorkItem(DoSomething); Thread.Sleep(1000); // this will freeze application 这是一个回调(在背景线程上执行): static void DoSomething(object state) { Thread.Sleep(5000); // this
我有一个自定义视图类,它正在绘制图像.问题是当我使用thread.sleep(200)时;在OnDraw方法中,它还影响在同一活动中的XML元素.因此,我必须等待200毫秒200米,直到发生了什么. MainPage extends Activity implements OnClickListener{ onCreate(...){ RelativeLayout rl = (RelativeLayout) findViewById(R.id.main_rl); rl.addView(new CustomView(this)); } onClick(View v){ switch(v.getId){ ... }; } } CustomView extends View{ onDraw(){ try{ Thr
喜欢下面的链接,是否有java函数中断线程异步队列并放入可警报的函数? 我想在Java中发挥异步计时器功能.我检查了它在C ++中起作用.但是我不知道它是否在Java. 当主线程运行并定期检查是否有异步计时器启动并运行它并返回并再次运行.那就是我想做的. 当然,在检查异步计时器时,我将使用可警报的睡眠. 我试图在Google中找到它,但没有找到. 预先感谢! 我想做的更多细节在下面. 让我们假设有一个程序得到以下请求: msg1 : msgname=aa1 to=sub1 waittime=1000 msgbody msg2 : msgname=aa2 to=sub2 waittime=2000 msgbody msg3 : msgname=aa3 to=sub1 waittime=3000 msgbody msg4 : msgname=aa3 to=sub1 msgbody . . ,该程序应将每个MSG传递给sub1,sub2中描述的sub2到
是否有一种简单的方法可以使用C ++/STDLIB安装定期出现的计时器功能?我想摆脱循环: using namespace std::chrono; // literal suffixes auto tNext = steady_clock::now(); while () { std::this_thread::sleep_until(tNext); tNext = tNext + 100ms; ... 该功能将以自己的线程运行. 解决方案 我猜你想要什么 int i = 10; auto pred = [i]() mutable {return i--;}; auto print = []{cout
推定/前奏: 在以前的问题中,我们注意到Thread.Sleep块线程请参见:何时使用任务. 我们还注意到,控制台应用程序具有三个线程:主线程,GC线程和最终线程IIRC.所有其他线程都是调试器线程. 我们知道,异步不会旋转新线程,而是在同步上下文上运行,"仅在方法处于活动状态时才在线程上使用时间". 设置: 在示例控制台应用程序中,我们可以看到,兄弟姐妹和父码都不受到Thread.Sleep的呼叫的影响,至少在调用等待(如果进一步)之前. . var sw = new Stopwatch(); sw.Start(); Console.WriteLine($"{sw.Elapsed}"); var asyncTests = new AsyncTests(); var go1 = asyncTests.WriteWithSleep(); var go2 = asyncTests.WriteWithoutSleep(); await go1; await go2; s