c++ - 经过一定时间后调用函数

标签 c++ function timer

我正在制作一个 GUI API(用于游戏,而不是操作系统)并想实现动画按钮。我希望能够创建定时事件,但是,在类里面。 示例:

class TextBox
{
   void changeColor(int color);

    void createTimedEvent(func* or something, int ticks);
     void animate()
{

    createTimedEvent(changeColor(red),30);

}

};

所以在这个例子中,计时器将在 30 毫秒后调用类实例的 changeColor 函数,参数为红色。有办法做到这一点吗?

基本上,在给定时间间隔到期后调用函数的函数,该函数可以是来自可实例化类的函数,带有 n 个参数。

计时器的精度对我来说不是什么大问题。

谢谢

最佳答案

我相信您可以使用 Boost.Asio 使这项工作可移植地工作——这主要是为异步 I/O 设计的,但我看不出定时器代码不能在其他上下文中使用的原因。参见 this example了解如何启动一个计时器,该计时器在到期后回调您的代码。

我注意到的唯一条件是您必须在某个线程中使用您在此处使用的 ioservice 实例调用 ioservice::run,否则回调不会发生。

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

void print(const boost::system::error_code& /*e*/)
{
  std::cout << "Hello, world!\n";
}

int main()
{
  boost::asio::io_service io;

  boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));

  t.async_wait(print);

  // ensure we call io.run() from some thread or callbacks will not happen

  // other app logic

  return(0);
}

也有关于这个主题的讨论 on MSDN blogs here由图书馆的作者。

关于c++ - 经过一定时间后调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877180/

相关文章:

javascript - 您可以在 JavaScript 中使用自定义原型(prototype)创建函数吗?

java - 如何在 Java 中计算事件的耗时?

perl - 我可以在 AnyEvent::Fork 中使用 AnyEvent->timer() 吗?

PHP 和 Javascript 计数定时器

c++ - 在多个函数中使用相同的变量

python:组合排序键函数 itemgetter 和 str.lower

c++ - 在我自己的命名空间中定义后缀 _t 数据类型

C++ 删除管理员权限

C++ 为 VS2012 构建 Winsparkle

c++ - 在 pybind11 和 C++ 中添加源时,没有给出目标错误的源代码