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 が必要です。また、上記のコードでは、ワーカー スレッドが終了しないため、メイン スレッドは無限に join を待機することに注意してください。

于 2012-08-24T04:10:29.217 に答える
0

ループと Thread.Sleep() をワーカー スレッドに配置します。

于 2012-08-24T04:11:32.657 に答える