アプリケーションをフリーズさせずに毎秒何かを実行する while ループを作成するにはどうすればよいですか? たとえば、Thread.Sleep() を使用すると、スレッドがフリーズします。誰か知っていますか?
質問する
101 次
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 に答える