0

我怎样才能使一个while循环每秒做一些不冻结应用程序的事情?例如使用 Thread.Sleep() 冻结线程。有人知道吗?

4

3 回答 3

1
public class Test implements Runnable {

@Override
public void run() {
    while(true){
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // Your Statement goes here

    }

}

public static void main(String[] args) {
    Test test= new Test();
    Thread t= new Thread(test);
    t.start();
}

}

于 2012-08-24T04:32:50.993 回答
0

你没有指定语言。我将在 C++ 中提供一个示例,该概念在其他语言中应该是相似的。

首先,这将使主线程进入睡眠状态:

int main(int, char**)
{
  while(true)
  { 
    sleep(1); // Put current thread to sleep;
    // do some work.

  }
  return 0;
}

另一方面,这将创建一个工作线程。主线程将保持活动状态。

#include <iostream>
#include <thread>

void doWork()
{
   while(true) 
   {
      // Do some work;
      sleep(1); // Rest
      std::cout << "hi from worker." << std::endl;
   }
}

int main(int, char**)
{

  std::thread worker(&doWork);
  std::cout << "hello from main thread, the worker thread is busy." << std::endl;
  worker.join();

  return 0;
}

代码未经测试。刚刚测试了这个,看看它的实际效果:http: //ideone.com/aEVFi

线程需要 c++11。另外,请注意,在上面的代码中,主线程将无限等待加入,因为工作线程永远不会终止。

于 2012-08-24T04:10:29.217 回答
0

将循环和 Thread.Sleep() 放入工作线程中。

于 2012-08-24T04:11:32.657 回答