2011-07-12 155 views
0

我想在我的程序中創建計時器,以便我可以使其每分鐘重新運行一次,但我不知道如何在C++應用程序中執行此操作。在C#中,我可以創建一個計時器,但現在我在這裏苦苦掙扎...如何創建計時器重複運行我的程序? C++

sleep();不是一種選擇,因爲據我所知,它會讓你的程序在X秒內處於非活動狀態,所以我需要我的應用程序處於活動狀態並開始工作,計算所有時間。這是因爲我的代碼被用來不斷地輸入信息到MS Access表中。我能夠創建我的代碼的必要組件來連接和執行對錶的插入/更新,但這僅僅是我創建的代碼的很多組件。請幫助我解決這個小問題(或者大問題),我對C++和學習ATM非常陌生,但我正在開發一條快速的學習曲線。謝謝

+0

檢查了這一點。 http://stackoverflow.com/questions/4855597/how-do-i-create-a-timer-do-something-every-x-seconds-minutes-hours – sealz

+0

我認爲有定時器內置在winapi。 – 2011-07-12 19:37:44

回答

1

我想你在Windows上工作,因爲你提到的C#。所以看看SetTimer,如果它是一個MFC應用程序,然後看看CWnd::SetTimer

+0

c#也可以在linux上使用Mono。 – 2011-07-12 19:44:58

+0

我知道這一點,但如果我只是打賭,那就是Windows,我會把這些錢放在一個沒有問題的地方;此外,如果您在下面閱讀,則可以看到對MS Access的引用。這意味着Windows :) –

1

每個平臺都提供了用於創建定時器的api,它通常會在定時器到期後給您一個回調。您只需搜索平臺上可用的api即可。

如果您使用的是Windows使用setTimer功能。

+0

我不想太挑剔,但因爲這是Windows C API,所以正確的案例是SetTimer,而不是setTimer –

0

如果您使用C++ .NET,則可以使用與C#相同的Timer類,只需使用C++語法(使用gcnew而不是new,使用^作爲GC引用)。

否則,你可能只是有一個循環:

while (should_keep_looping) { 
    // do what you need to do 

    // if necessary: 
    sleep(1); 
} 
0
  • ,如果你有,你可以使用它的消息隊列,由ALS和馬呂斯在他們的答案提出了一個窗口
  • 你可以使用一些任務發送器和一些計時器註冊一個回調,例如功能由Boost.Asio並提供了其deadline_timerexample
  • 您可以檢查是否計時器在酒杯的鏈接
  • 提出,也可以創建單獨的線程,並使其調用你的回調,當時間到了你的任務之間手動過期。優點:您可以在那裏使用sleep(),並且您的回調函數將與您的主線程並行調用。缺點:擔心同步
相關問題