在我的C++程序中,我想製作一個定期調用的函數,就像每秒調用一次。我怎樣才能做到這一點?一個定期調用的C++函數
我在OSX中創建一個shell。它在Linux中也應該是一樣的。此功能的目的是觀察衍生的程序,並在開始使用太多內存或CPU時間時終止它們。
在我的C++程序中,我想製作一個定期調用的函數,就像每秒調用一次。我怎樣才能做到這一點?一個定期調用的C++函數
我在OSX中創建一個shell。它在Linux中也應該是一樣的。此功能的目的是觀察衍生的程序,並在開始使用太多內存或CPU時間時終止它們。
好了 - 這裏有一個並行線程解決方案。有人可能想檢查我的pthread API的使用是否正確,但我驗證了這一點:
#include <stdio.h>
#include <pthread.h>
#define false (0!=0)
static void * TimerRoutine(void *) ;
int main(int argc, const char ** argv)
{
pthread_t thread ;
pthread_attr_t attr ;
pthread_attr_init(& attr) ;
pthread_create(& thread, & attr, TimerRoutine, NULL) ;
int done = false ;
while(!done)
{
char input[80] ;
scanf("%79s", input) ;
// handle input command (or something)
done = (0 == strcmp(input, "quit")) ;
}
// wait for timer thread to exit
pthread_cancel(thread) ;
pthread_join(thread, NULL) ;
}
static void * TimerRoutine(void * arg)
{
pthread_detach(pthread_self()) ;
int done = false ;
while(!done)
{
// do background task, i.e.:
printf("tick!\n") ;
sleep(1) ;
pthread_testcancel() ;
}
}
注意,如果你想精確的1Hz定時睡眠(1)將需要改變爲一個睡眠(1000000三角洲),其中三角洲是經過的時間自上一次睡眠結束以來。 – 2014-02-14 09:43:12
你可以創建一個高優先級的線程,循環但在每個循環之間休息一秒鐘。
您可以使用posix線程(<pthread.h>
)和sleep/clock_nanosleep(<time.h>
)。 POSIX API由所有的Unix包括Linux和Mac OS X.
支持。如果你不需要多線程,你看這個:
#include <stdio.h>
#define false (0!=0)
int main(int argc, const char ** argv)
{
int done = false ;
while(!done)
{
// check for rogue processes here
sleep(1) ;
printf("tick!\n") ;
}
}
如果使用了這個,那麼程序如何做其他事情? – 2011-04-27 09:20:33
它不能 - 你不知道你想要那個:-) – nielsbot 2011-04-27 09:24:12
你能提供更多的上下文嗎?就像這是一個命令行程序,還是它是一個GUI程序?該程序是否需要響應用戶事件(例如鍵盤事件)?你的目標是什麼操作系統?爲什麼你需要定期調用一個函數?它的任務是什麼? – 2011-04-27 07:50:30
該功能不是問題。每個函數都可以定期調用。您需要像在特定時間間隔內調用該函數的線程。 – tgmath 2011-04-27 07:53:01
它肯定會幫助你知道你在做什麼平臺。例如,在一個類似Unix的系統上,你可以將你的函數放在'SIGALRM'的處理程序中並請求報警信號。我確定Windows上有類似的選項。 – 2011-04-27 07:57:30