我正在制作一个 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/