标签: wait

Java wait()/ join():为什么这不会死锁?

给出以下Java代码:

public class Test {

    static private class MyThread extends Thread {
        private boolean mustShutdown = false;

        @Override
        public synchronized void run() {
            // loop and do nothing, just wait until we must shut down
            while (!mustShutdown) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    System.out.println("Exception on wait()");
                }
            }
        }

        public synchronized void shutdown() throws InterruptedException {
            // set flag for termination, notify the thread and wait for it to die
            mustShutdown = true;
            notify();
            join(); // lock …
Run Code Online (Sandbox Code Playgroud)

java multithreading join notify wait

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

在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
查看次数

让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万
查看次数

PHP RabbitMQ setTimeout或其他选项停止等待队列

我需要创建一个简单的队列管理器来将数字从发件人传递给消费者.RabbitMQ提供的Hello World教程几乎覆盖了70%.

但我需要将队列更改为永远不会等待传入的消息.或者在一定数量的消息后停止等待.我阅读并尝试了其他帖子中的一些解决方案,但它不起作用.

rabbitmq AMQP :: consume() - 未定义的方法.还有另一种方法,wait_frame但它受到保护.

和其他帖子是python,我不明白.

<?php

require_once __DIR__ . '/vendor/autoload.php';
require 'config.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;

function recieveQueue($queueName){
    $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');

    // try{
    //  $connection->wait_frame(10);
    // }catch(AMQPConnectionException $e){
    //  echo "asdasd";
    // }

    $channel = $connection->channel();

    $channel->queue_declare($queueName, false, false, false, false);

    echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";

    $callback = function($msg) {
        echo " [x] Received ", $msg->body, "\n";

    };

    // $tag = uniqid() . microtime(true);
    // $queue->consume($callback, $flags, …
Run Code Online (Sandbox Code Playgroud)

php amqp wait rabbitmq php-amqplib

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

等待每个jQuery

我试图让每个声明中的div淡入/淡出.问题是在淡入/淡出完成之前调用下一个项目.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js" type="text/javascript"></script>

<div id='one'>one</div>
<div id='two'>two</div>
<div id='three'>three</div>

<script>
$.each([ "one", "two", "three"], function() {
  console.log( 'start - ' + this );
  animate( this );
  console.log( 'end - ' + this );
});

function animate( id )
{
  box = '#' + id;

  $(box).fadeOut( 500, function( )
  {

    console.log('showing - ' + id);
    $(box).fadeIn( 500 );
    $(box).css('backgroundColor','white');

  });

}
</script>
Run Code Online (Sandbox Code Playgroud)

控制台节目 -

start - one
end - one
start - two
end - two
start - three
end …
Run Code Online (Sandbox Code Playgroud)

each jquery wait

8
推荐指数
1
解决办法
3551
查看次数

等待从弹出窗体中获取信息

在初始化表单(主窗体)时,它调用另一个窗体来获取一堆启动输入,然后传输大量信息:

Form3 getup = new Form3();
getup.Show();
example = getup.example;
Run Code Online (Sandbox Code Playgroud)

但是,我需要等待这个新的表单信息完成.

Form3 getup = new Form3();
getup.Show();
waitfordone();
example = getup.example;
Run Code Online (Sandbox Code Playgroud)

ATM,我尝试过使用while语句:

Form3 getup = new Form3();
getup.Show();
While(getup.visible=true)Console.WriteLine("waiting");
example = getup.example;
Run Code Online (Sandbox Code Playgroud)

但是这会导致挂起...也就是说,它会运行,然后冻结.我怀疑这是因为while循环正在吃掉所有的处理.所以,我试着创建一个新线程

Form3 getup = new Form3();
Thread t = new Thread(getup.Show());
t.start();
While(getup.visible=false)Console.WriteLine("waiting"); // takes a little bit to open
While(getup.visible=true)Console.WriteLine("waiting"); //waits for close
example = getup.example;
Run Code Online (Sandbox Code Playgroud)

但这也导致它挂起.也许出于同样的原因.我已经研究过autoresetevents.

我试过了:

AutoResetEvent invisible = new AutoResetEvent(false);
Form3 getup = new Form3();
void setup_invisible(object sender, EventArgs e)
{
    if (getup.Visible == …
Run Code Online (Sandbox Code Playgroud)

c# forms multithreading wait

8
推荐指数
1
解决办法
1万
查看次数

Java wait(),notify()的实现是否与锁明显不同?

出于好奇,当Java实现wait()和notify()方法时,它们真的只是使用锁吗?即,wait()获取互斥锁,notify()释放互斥锁,notifyAll()释放所有互斥锁(当然在同一个对象中)?

除了比使用锁更简单之外,使用wait()和notify()还有其他优点吗?

[编辑]我意识到在Brian的评论之后我对此感到困惑:

等待没有锁定,它释放锁定并将其传递给正在等待互斥锁的同步语句的其他人,然后等待有锁定并通知的其他人通知,这会将锁定传回原始状态调用等待的线程.我认为这就是你感到困惑的地方. - 布赖恩17分钟前

java concurrency multithreading locking wait

8
推荐指数
2
解决办法
2867
查看次数

在Java中的main()内的Thread实例上运行wait()

我在java.lang.Object中使用wait()的定时版本,并观察到它在两种不同的场景中的行为不同.

场景1:在Thread中使用run()的默认定义

public static void main (String[] args) throws InterruptedException {
    Thread t = new Thread();    
    t.start();
    System.out.print("X");
    synchronized(t) { t.wait(10000);}
    System.out.print("Y");
}
Run Code Online (Sandbox Code Playgroud)

关于scenario1的问题:我遇到了X和Y之间的延迟.这是因为我从main调用wait()(即使在t上)因此正在使用主线程的调用堆栈,而不是第二个线程?

场景2:动态 子类化线程以覆盖run()以打印内容.

public static void main (String[] args) throws InterruptedException {
     Thread t = new Thread() {public void run() 
                     {System.out.print("I am the second thread.");}};
     t.start();
     System.out.print("X");
     synchronized(t) { t.wait(10000);}
     System.out.print("Y");
}
Run Code Online (Sandbox Code Playgroud)

关于场景2的问题:我没有遇到任何延迟!是什么改变只是因为我已经覆盖了run()?现在,每次我运行该程序时,它立即打印出"XI am the second thread.Y",无论如何都没有任何延迟!wait()的效果在哪里消失了?

java multithreading synchronized wait

8
推荐指数
2
解决办法
1168
查看次数

tkwait wait_variable/wait_window/wait_visibility 是否损坏?

我最近开始随意使用tkwait并注意到某些功能仅在特殊条件下才起作用。例如:

import tkinter as tk

def w(seconds):
    dummy = tk.Toplevel(root)
    dummy.title(seconds)
    dummy.after(seconds*1000, lambda x=dummy: x.destroy())
    dummy.wait_window(dummy)
    print(seconds)

root = tk.Tk()
for i in [5,2,10]:
    w(i)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好并且符合预期:

  1. for循环调用函数
  2. 该函数运行并阻止代码 x 秒
  3. 窗口被销毁并且 for 循环继续

但在事件驱动的环境中,这些tkwait调用会变得很棘手。该文档指出引用:

如果事件处理程序再次调用 tkwait,则对 tkwait 的嵌套调用必须在外部调用完成之前完成

>>5 >>2 >>10您将得到的不是输出>>10 >>2 >>5,因为嵌套调用会阻塞内部调用,而外部调用会阻塞内部调用。我怀疑嵌套事件循环或等效的主循环在等待时以正常方式处理事件

我使用此功能是否做错了什么?因为如果您仔细想想,几乎所有 tkinter 对话框窗口都在使用此功能,而我以前从未读过此行为。

事件驱动的示例可能是:

import tkinter as tk

def w(seconds):
    dummy = tk.Toplevel(root)
    dummy.title(seconds)
    dummy.after(seconds*1000, lambda x=dummy: x.destroy())
    dummy.wait_window(dummy)
    print(seconds)

root …
Run Code Online (Sandbox Code Playgroud)

python tkinter tcl event-driven wait

8
推荐指数
1
解决办法
627
查看次数