C++ 如何每x秒调用一个函数

C++ 如何每x秒调用一个函数,c++,windows,C++,Windows,我想写一个程序来模拟一个自助餐厅,在这个自助餐厅里,顾客每10~50秒进入一次自助餐厅。因此,我希望每10~50秒调用一个函数,以便在主循环中显示要调用的函数中存在的菜单卡,获取时间并将其与上次调用该函数的时间进行比较(声明时初始化为“now”)。如果大于间隔,则调用函数并将“last time called”变量设置为当前时间。有两种方法:1.异步2。同步的 假设您使用的是Win32、C++。您可以使用Win32 API UINT_PTR timerid=SetTimer(NULL、0、毫秒

我想写一个程序来模拟一个自助餐厅,在这个自助餐厅里,顾客每10~50秒进入一次自助餐厅。因此,我希望每10~50秒调用一个函数,以便在主循环中显示要调用的函数中存在的菜单卡,获取时间并将其与上次调用该函数的时间进行比较(声明时初始化为“now”)。如果大于间隔,则调用函数并将“last time called”变量设置为当前时间。

有两种方法:1.异步2。同步的

假设您使用的是Win32、C++。您可以使用Win32 API

UINT_PTR timerid=SetTimer(NULL、0、毫秒和回调)

  • 如果你想要一种投票方式,你最好使用类似的方式

      for(;;) 
        {
    
        Say_Hello();
        // Sleep for 50*1000ms
        Sleep(50000);
    
        }
    
  • 该库在中提供了此功能,并在其教程中明确介绍了此功能:

    • ,即等待计时器到期

    • ,即继续执行程序,并在计时器过期时调用回调函数


    如果在搜索C++时没有找到Boost库,你的谷歌FU就很弱。P> > P>一个跨平台的计时器,利用C++ STL,查看.</P>


    从这里开始,只需使用上面提到的两个跨平台计时器,每10~50秒创建并调用一个循环中的函数。

    在这10~50秒内还需要其他东西吗,还是在等待进入自助餐厅的人?我是C++初学者,我在网上搜索,但我没有发现我有一个方法,我想每50秒打电话,但是我想说的是,如果你所做的一切都是坐在那里50秒,然后调用这个函数的话,可以简化方法。如果你在那个时候没有做任何其他事情,你可以只需循环50秒的睡眠和函数调用。@克里斯+ 1,询问他是否需要轮询方法或异步定时器。你也可以在标准C++中自己制作。您不必使用winapi。@us2012它取决于睡眠时间是毫秒还是秒。。。这就是为什么我评论为50*1000ms…或者你可以写睡眠(50000)…是的。我的问题是,为什么要将其编写为
    for
    循环,而不是
    sleep(50000)
    。对于这个数量级的时间,这可能无关紧要,但对于较小的时间,结果可能会有所不同,这取决于您是将
    睡眠
    放在一个块中,还是分成多个块。@Ahmed:谢谢兄弟。但是,如何使用SetTimer API呢。我已经编写了这个代码测试:voif f(){printf(“hello”);}int main(){SetTimer(NULL,0,10000,(TIMERPROC)&f);},但它不起作用。thx@user2219913:“它不起作用。”这是一个立即取消任何有用评论资格的声明……只是好奇,如果我把它放在游戏循环中,它会起作用吗<代码>异步定时器
    。就像每5秒钟调用一个函数一样。@majidarif:我自己也没有使用过Boost.Asio,也没有看过文档,我会回答一个无保留的“是”。在固定的时间间隔调用函数就是这样的LIB的用途。哦,好吧,我担心它可能会在每次在循环中被调用时安排一个计时器。就像不是每5秒调用一次,而是在5秒后每循环调用一次。@majidarif:好吧,这取决于你如何设置它,不是吗?如果你不介意的话,你能检查一下我的问题吗?