2013-12-12 117 views
0

我正在嘗試定時器功能,每1秒刷新一次特殊事件。 問題是,如果我使用while + Sleep(1000)for循環+ Sleep(1000),它不會加載其下的其他功能,所以我正在尋找解決方案。C++定時器功能,每1秒刷新一次

我試過如下:

void Timer(){ 
    while(true){ 
    // events 
    if(Get_Current_Minute == Event_Minute) 
     // do event 
     Sleep(1000); 
    } 
} 

int Main(){ 

    std::cout << " Hello " << std::endl; // loaded 
    Function() // loaded; 

    Timer(); // the timer function 

    std::cout << " Other functions " << std::endl; // not loaded 
    Function_2() // not loaded 
} 

那麼什麼能解決?我想在我的應用程序中加載所有內容+事件每1秒鐘會有一次定時器刷新。

+1

多線程。 – David

+0

我想你需要閱讀關於多線程,因爲你當前的程序是單線程的 –

+1

究竟在哪裏連接到JavaScript? – Till

回答

1

你執行功能定時器()

  • 這是無限循環
  • 所以它永遠不會繼續您的Function_2();

如果你想實現它,那麼Timer();應該

  • 單獨的線程
  • 或實時OS計時器事件(無休眠或環)

如果你不能/不想去這樣

  • ,那麼你必須合併Function_2()和Timer()一起。
  • 在這種情況下不使用的睡眠
  • 但衡量實際的時間,如果是更大然後刨事件時間
  • 執行它,並計劃下一次事件時間

主題例如:

//--------------------------------------------------------------------------- 
volatile int threads_run=0; 
volatile bool threads_stop=false; 
unsigned long __stdcall thread_timer(LPVOID p) 
    { 
    threads_run++; 
    for (;threads_stop;) 
     { 
     //Do your event stuff 
     Sleep(1000); 
     } 
    threads_run--; 
    return 0; 
    } 
void main() 
    { 
    HANDLE hnd; 
    std::cout << " Hello " << std::endl; 
    Function(); 

    // start Timer thread 
    hnd=CreateThread(0,0,thread_timer,NULL,0,0); 

    std::cout << " Other functions " << std::endl; 
    Function_2(); 

    // stop and wait for all threads 
    threads_stop=true; 
    for (;threads_run;) Sleep(10); 
    } 
//--------------------------------------------------------------------------- 
+0

當你不再需要它時,不要忘記關閉句柄(hnd)(關閉句柄不會終止線程),當你的應用程序停止時它會自動關閉它,但是如果你動態地創建多個線程,那麼你應該關閉它們的句柄你的自己否則,您將消耗越來越多的句柄,直到Windows停止工作(不僅僅是您的應用程序)PS句柄可用於更改關聯或暫停/恢復/終止線程 – Spektre