本帖最后由 baiyuxiong 于 2010-12-16 12:15:10 编辑

解决方案 »

  1.   

    Timer和TimerTask应该可以做得到。
      

  2.   

    还是用while 循环了  ,返回就立即循环调用
      

  3.   

    线程休眠时间,做成动态的就行了。
    (不过一般时间都不会这么准。所以如果服务器设置的是60秒的超时时间,客户端最好58、59秒左右就发一次请求)    public void run() {
            try {
                while (true) {
                    long current = System.currentTimeMillis();
                    long k = next_send_time - current;
                    if (k > 0) {
                        Thread.sleep(k);
                    } else {
                        //handshake()
                        Thread.sleep(60 * 1000);
                    }
                }
            } catch (InterruptedException ex) {
            }
        }    public synchronized void refreshNextTime() {
            next_send_time = System.currentTimeMillis() + 60 * 1000;
        }
        private volatile long next_send_time;//下一次发起请求的日期
      

  4.   

    你意思是每有一个返回就调用一次while循环?那如果服务器端不停的返回数据,我就不停的调用while循环?
      

  5.   

    如果在SLEEP的60秒钟内,有SOCKET服务器发送过来数据的话,这个WHILE循环怎么处理?难道还让它sleep?
      

  6.   

    15秒的时候,有刷新。next = 15+60 =75
    休眠60秒结束,还会休眠(75-60=15)秒。