2012-08-24 56 views
0

我怎樣才能做一個while循環,每秒做不凍結應用程序的東西?例如使用Thread.Sleep()凍結線程。有人知道嗎?無限雖然這不dlocking線程

+1

哪種語言? – Cdeez

+1

如果您從主線程調用睡眠,它將停止主線程。你需要創建另一個線程來完成工作。 – anio

回答

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的線程。另外請注意,在上面的代碼中,主線程將無限等待連接,因爲工作線程永遠不會終止。

0

將您的循環和Thread.Sleep()放入工作線程中。

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(); 
} 

}