A c++;定期被调用的函数 在我的C++程序中,我想做一个周期性调用的函数,比如每秒一次。我该怎么做

A c++;定期被调用的函数 在我的C++程序中,我想做一个周期性调用的函数,比如每秒一次。我该怎么做,c++,function,C++,Function,我正在OSX中创建一个shell。它在Linux中也应该是一样的。此函数的目的是监视生成的程序,并在它们开始使用过多内存或cpu时间时终止它们。有。如果使用Boost,则可以使用Boost计时器功能注册定期调用的回调。 看看: 您还可以使用每个平台提供的计时器功能,但这是不可移植的。此外,你也没有提到任何具体的平台 编辑:由于您使用的是Mac OS X,也许您可以使用 我还没有用过它,只是一个快速的谷歌搜索显示它对Linux有效,因为它必须是特定于平台的。你可以创建一个高优先级的线程,循环,但在

我正在OSX中创建一个shell。它在Linux中也应该是一样的。此函数的目的是监视生成的程序,并在它们开始使用过多内存或cpu时间时终止它们。

有。

如果使用Boost,则可以使用Boost计时器功能注册定期调用的回调。
看看:

您还可以使用每个平台提供的计时器功能,但这是不可移植的。此外,你也没有提到任何具体的平台

编辑:由于您使用的是Mac OS X,也许您可以使用

我还没有用过它,只是一个快速的谷歌搜索显示它对Linux有效,因为它必须是特定于平台的。

你可以创建一个高优先级的线程,循环,但在每个循环之间花一秒钟睡眠。

你可以使用posix线程(
)和睡眠/时钟睡眠(
)。POSIX API受包括Linux和Mac OS X在内的所有Unix的支持。

如果您不需要多个线程,那么该怎么办:

#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") ;
    }
}
#包括
#定义false(0!=0)
int main(int argc,常量字符**argv)
{
int done=false;
而(!完成)
{
//在这里检查流氓进程
睡眠(1);
printf(“勾选!\n”);
}
}
好——这里有一个pthread解决方案。有人可能想检查我的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( ) ;
    }   
}
#包括
#包括
#定义false(0!=0)
静态无效*时间例程(无效*);
int main(int argc,常量字符**argv)
{
pthread\u t线程;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&thread,&attr,TimerRoutine,NULL);
int done=false;
而(!完成)
{
字符输入[80];
扫描频率(“%79s”,输入);
//处理输入命令(或其他)
完成=(0==strcmp(输入,“退出”);
}
//等待计时器线程退出
pthread_cancel(线程);
pthread_join(线程,NULL);
}
静态void*TimerRoutine(void*arg)
{
pthread_detach(pthread_self());
int done=false;
而(!完成)
{
//执行后台任务,即:
printf(“勾选!\n”);
睡眠(1);
pthread_testcancel();
}   
}

您能在问题中提供更多的上下文吗?这是命令行程序还是GUI程序?程序是否需要响应用户事件(如键盘事件)?你的目标是什么操作系统?为什么需要定期调用函数?它的任务是什么?功能不是问题。每个函数都可以定期调用。你需要一个像线程这样的东西,在给定的时间间隔内调用函数。了解你在什么平台上执行此操作肯定会有所帮助。例如,在类Unix系统上,可以将函数放入
SIGALRM
的处理程序中,并请求报警信号。我相信Windows上也有类似的选项。设置cron作业如何?如果使用了它,那么程序如何做其他事情?它不能--不知道你想要:-)注意如果你想要精确的1Hz定时,睡眠(1)将需要更改为usleep(1000000 delta),其中delta是自上次睡眠结束以来经过的时间。