gpt4 book ai didi

c++ - 如何使用 C++ 11 创建计时器事件?

转载 作者:IT老高 更新时间:2023-10-28 12:33:05 29 4
gpt4 key购买 nike

如何使用 C++ 11 创建定时器事件?

我需要类似:“1 秒后给我打电话”。

有图书馆吗?

最佳答案

对我认为您想要实现的目标进行了简单的实现。您可以使用带有以下参数的类 later:

  • int(等待运行代码的毫秒数)
  • bool(如果为 true,则立即返回并在指定时间后在另一个线程上运行代码)
  • 可变参数(正是您要提供给 std::bind 的内容)

您可以将 std::chrono::milliseconds 更改为 std::chrono::nanosecondsmicroseconds 以获得更高的精度并添加第二个 int 和一个 for 循环来指定运行代码的次数。

来吧,享受吧:

#include <functional>
#include <chrono>
#include <future>
#include <cstdio>

class later
{
public:
template <class callable, class... arguments>
later(int after, bool async, callable&& f, arguments&&... args)
{
std::function<typename std::result_of<callable(arguments...)>::type()> task(std::bind(std::forward<callable>(f), std::forward<arguments>(args)...));

if (async)
{
std::thread([after, task]() {
std::this_thread::sleep_for(std::chrono::milliseconds(after));
task();
}).detach();
}
else
{
std::this_thread::sleep_for(std::chrono::milliseconds(after));
task();
}
}

};

void test1(void)
{
return;
}

void test2(int a)
{
printf("%i\n", a);
return;
}

int main()
{
later later_test1(1000, false, &test1);
later later_test2(1000, false, &test2, 101);

return 0;
}

两秒后的输出:

101

关于c++ - 如何使用 C++ 11 创建计时器事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650885/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com