标签: wait

Java:如何在wait()中区分虚假唤醒和超时

这是线程正在等待notify()或超时的情况.这里添加了一个while循环来处理虚假唤醒.

boolean dosleep = true;
while (dosleep){
    try {
        wait(2000);
        /**
         * Write some code here so that
         * if it is spurious wakeup, go back and sleep.
         * or if it is timeout, get out of the loop. 
         */

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我如何区分虚假唤醒和超时?如果它是一个虚假的醒来,我需要回去等待.如果是超时,我需要退出循环.

我可以很容易地识别notify()的情况,因为我将在notify()调用时将dosleep变量设置为false.

编辑:由于嵌入式项目的要求,我使用的是1.4版java.我不能使用,Condition因为它只在1.5后可用.

提前致谢.

java multithreading wait

9
推荐指数
3
解决办法
2486
查看次数

Python - 直到按键或超时才做某事

我几乎已经解决了这个问题,但我认为我需要朝着正确的方向努力.

我想要做的事每五秒钟,直到或者一定的时间量已过去用户中断它(在这种情况下,完成循环的该迭代完成之前).

import time
import threading

def do_something():
    T0 = time.clock()
    while (time.clock() - T0) < 60 and not e.isSet(): #as long as 60s haven't elapsed
                                                      #and the flag is not set
        #here do a bunch of stuff
        time.sleep(5)

thread = threading.Thread(target=do_something, args=())
thread.start()
e = threading.Event()

while thread.isAlive():
    #here I want the main thread to wait for a keypress and, if it receives it,
    #set the event e, which will cause the thread to finish …
Run Code Online (Sandbox Code Playgroud)

python multithreading timeout keypress wait

9
推荐指数
1
解决办法
7622
查看次数

在Android中显示ProgressBar一段时间

我必须在我的Android应用程序中等待几秒钟,我想在此期间显示进度条,我该怎么做?

我试过这个代码:

    public boolean WaitTask() {

        pDialog = ProgressDialog.show(context,null, "Lädt..",true);
        new Thread() {
        public void run() {
            try{
                // just doing some long operation
                sleep(2000);
             } catch (Exception e) {  }
             pDialog.dismiss();
             }
         }.start();
        return true;
   }
Run Code Online (Sandbox Code Playgroud)

但是进度条立即关闭而不等待两秒钟.我的问题在哪里?

进度条应该类似于Android开发者在站点中显示的活动圈.

更新 AsyncTask

private class WaitTime extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mDialog.show();
    }
    protected void onPostExecute() {
        mDialog.dismiss();
    }

@Override
protected void onCancelled() {
    mDialog.dismiss();
    super.onCancelled();
}

    @Override
    protected Void doInBackground(Void... params) {
        long …
Run Code Online (Sandbox Code Playgroud)

android wait progress-bar

9
推荐指数
2
解决办法
3万
查看次数

使用Task.wait()应用程序挂起并永不返回

我是C#的新手并且正在使用Task.我试图运行这个应用程序但我的应用程序每次都挂起.当我添加时task.wait(),它会一直等待,永远不会返回.任何帮助深表感谢.编辑:我想异步调用DownloadString.当我按照"Austin Salonen"的建议执行task.Start()时,我没有得到位置的地址,而是从returnVal获取位置字符串中的默认值.这意味着在任务完成之前,位置得到了值.如何确保在任务完成后只有位置被指定returnVal.

public class ReverseGeoCoding
        {
                static string baseUri = "http://maps.googleapis.com/maps/api/geocode/xml?latlng={0},{1}&sensor=false";
                string location = "default";
                static string returnVal = "defaultRet";
                string latitude = "51.962146";
                string longitude = "7.602304";
                public string getLocation()
                {
                    Task task = new Task(() => RetrieveFormatedAddress(latitude, longitude));  
                //var result = Task.Factory.StartNew(RetrieveFormatedAddress("51.962146", "7.602304"));
                    task.Wait();
                    //RetrieveFormatedAddress("51.962146", "7.602304");
                    location = returnVal;
                    return location;
                }
                public static void RetrieveFormatedAddress(string lat, string lng)
                {
                    string requestUri = string.Format(baseUri, lat, lng);

                    using (WebClient wc = new WebClient())
                    {
                        wc.DownloadStringCompleted …
Run Code Online (Sandbox Code Playgroud)

c# google-api task wait reverse-geocoding

9
推荐指数
2
解决办法
8897
查看次数

Java同时生成无限量的对象

所以我需要制作一个电梯模拟器,我想知道如何不断地让人们打电话给电梯.我需要这个永远继续下去.所以基本上创建一个人并呼叫电梯.所有这些电话都被跟踪,但我想我需要跟踪实际上在电梯上的人.

我有几个班Person,Elevator,ElevatorCallElevatorCallQueue.

  1. 在Person中,我有一个run()方法,它基本上使用当前楼层和目的地楼层进行电梯呼叫,然后我有一个BlockingQueue我打电话的方法.这个run方法只运行true.

  2. ElevatorCall我只有收集和目的地楼层的gettersetter

  3. 在ElevatorCallQueue中,我有MAX_CALLS和numberOfPeople的变量.我有一个BlockingQueue<ElevatorCall> queue = new ArrayBlockingQueue<ElevatorCall>(MAX_CALLS) 和一个List<Person> 我在列表中添加人员,我浏览列表并run()在每个人上启动方法.最后,我创建了一个电梯并提供队列,然后运行它.

  4. 在电梯我有BlockingQueue<ElevatorCalls>.我在while(true这里也有a ),在里面我做了一个ArrayList<ElevatorCall>然后我使用了ArrayList<ElevatorCalls>作为参数的BlockingQueues drainTo方法.该run()方法的其余部分基本上遍历数组列表并执行电梯所做的事情,因此它转到第一个按下的按钮,检查每个楼层的人员以及它是否是目的地楼层.

现在我已经卡住了,不知道从哪里开始.我需要一些人们如何连续添加并呼叫电梯,并且如果没有更多呼叫,让电梯等待.如果有人能帮助我朝着正确的方向前进,我将不胜感激.谢谢

编辑

这是电梯类的代码,因为有人说我应该发布一些代码.但是我不确定要发布什么代码,所以我想我只是放入整个班级

java concurrency multithreading wait

9
推荐指数
1
解决办法
571
查看次数

我用了wait(&status),状态值是256,为什么?

我的代码中有这一行:

t = wait(&status); 
Run Code Online (Sandbox Code Playgroud)

当子进程工作时,status的值为0.

但是为什么它不起作用时会返回256?为什么改变子进程给予退出参数值时存在错误不会改变任何东西(出口(2)而不是exit(1)例如)?

谢谢

编辑:我在linux上,我用GCC编译.

我定义了这样的状态

int status;
t = wait(&status); 
Run Code Online (Sandbox Code Playgroud)

c wait

9
推荐指数
2
解决办法
3万
查看次数

让JavaFX等待并继续使用代码

基本上我试图使用JavaFX做一个简短的效果.我有一个心脏的形状(从两个圆圈和一个多边形加起来),我可以使用double值改变大小p."标准尺寸"将是p = 1.0;.

我试图给心脏增加一个泵效应.我有方法pumpOnce():

public void pumpOnce(){
    p = p + 1;
    initHeart();
    //Here goes what ever it takes to make stuff working!!
    p = p - 1;
    initHeart();
}
Run Code Online (Sandbox Code Playgroud)

initHeart()吸取内心的基础p.

我发现Thread.sleep();由于JavaFX中的线程原理,或类似的方法不起作用.

但是我可以用什么呢?

javafx wait thread-sleep

9
推荐指数
2
解决办法
3万
查看次数

ProcessBuilder和Process.waitFor(),等待多长时间?

我正在使用ProcessBuilder类和Process类从java执行.exe文件.解释我在做什么:

 builder = new ProcessBuilder(commands);
 builder.redirectErrorStream(true);
 Process process = builder.start();
 process.waitFor();
Run Code Online (Sandbox Code Playgroud)

我只是想知道,"waitFor()"等待多久了?是等待我的.exe执行,还是等到执行结束?

我的.exe是一个已编译的AutoIt脚本.这意味着,可能会有像鼠标移动这样的交互,这需要一些时间.因此,我需要知道在调用.exe之后我的Java代码执行是否继续,或者它是否真的在等待它.

我想要实现的是两个脚本的旋转执行,但我担心,我的Java代码正在执行第二个脚本,而第一个脚本仍在运行.有没有人解决这个问题?我很高兴有任何想法.

java console process wait processbuilder

9
推荐指数
3
解决办法
2万
查看次数

wait/notify和wait/interrupt有什么区别?

synchronized (Foo.class) {
    while (someCondition) {
        try {
            Foo.class.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎这个线程在其他一些线程调用时interrupt()notify()在此线程上都会唤醒.这两者有什么不同吗?

- 编辑 -

我知道一个用于通知一个对象,另一个用于中断一个线程.但是这两者都导致了相同的结果,也就是说,这个线程被唤醒了,所以我想问的是这两种情况的后果是如何相互不同的.

java multithreading notify wait interruption

9
推荐指数
1
解决办法
6698
查看次数

如果wait()抛出InterruptedException,那么线程是否会等到获取对象的监视器?

例如:

public synchronized Object get() {
    while (result == null) {
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
            // Do we own the monitor of this object?
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

e.printStackTrace()执行,是我们保证自己的对象的显示器呢?

引用说当wait()在一个notify()或者notifyAll()调用之后返回时,线程会等待它获取对象的监视器.但wait()抛出异常时的情况呢?

java concurrency multithreading synchronized wait

9
推荐指数
2
解决办法
195
查看次数