2014-02-14 29 views
0

請幫我把朋友。我只是想實現一個計時器事件功能。讓我正確地描述它。C++中的計時器刻度事件,Linux

在主函數中,將運行連續操作(假設在while(1)循環中打印)。

但是應該有另一個函數,它會在一段時間間隔(假設2秒)後重復調用。但是在主函數中執行的操作不應該受到阻礙。我想我必須在這裏實現線程。

這就像在視覺工作室蜱事件。

我想用C++ gcc或g ++編譯器。

回答

0

您可以使用此代碼對自己跟蹤時間:

首先,一個輔助函數

double GetSeconds() 
{ 
    struct timeval Time; 
    gettimeofday(&Time, NULL); 
    int64_t T = Time.tv_usec + Time.tv_sec * 1000000; 
    return static_cast<double>(T)/1000000.0; 
} 

和主要的代碼使用它,這基本上是一個繁忙的循環:

const double EventTime = 2.0; // seconds 

double StartTime = GetSeconds(); 

while (...) 
{ 
    double T = GetSeconds(); 
    double DeltaTime = T-StartTime; 

    if (DeltaTime > EventTime) 
    { 
     FireEvent(); 
     StartTime = T; 
    } 
} 

您可以在單獨的線程中運行此循環,也可以將其與while (1)循環交錯使用。這是你的選擇。

在線程的情況下,你可以參考這個教程:Posix thread tutorial

+0

其實這是我的錯,我已經給了同時的例子(1)。其實情況並不完全如此。程序的主要控制可以到達任何地方。它可以離開while循環,甚至可以去任何其他功能。該程序的控制可以在任何其他功能之間流通。 但是,定時器事件只會在2秒的時間間隔後重復觸發,它會給我一個通知,在2秒的時間間隔內被調用各種時間。 這就是我想要的。 – Ankur

+0

@Ankur:然後把我的例子包裝在一個線程的主體中。 –

+0

我對C++線程並不熟悉。我知道C#和Java線程,但不知道c + +線程 – Ankur