7

STL を使用して実装された TimerCallback ライブラリはありますか。プロジェクトに Boost 依存関係を持ち込めません。

期限切れのタイマーは、登録された関数をコールバックできる必要があります。

4

1 に答える 1

11

標準ライブラリには特定のタイマーはありませんが、実装するのは簡単です:

#include <thread>

template <typename Duration, typename Function>
void timer(Duration const & d, Function const & f)
{
    std::thread([d,f](){
        std::this_thread::sleep_for(d);
        f();
    }).detach();
}

使用例:

#include <chrono>
#include <iostream>

void hello() {std::cout << "Hello!\n";}

int main()
{
    timer(std::chrono::seconds(5), &hello);
    std::cout << "Launched\n";
    std::this_thread::sleep_for(std::chrono::seconds(10));
}

関数が別のスレッドで呼び出されることに注意してください。そのため、関数がアクセスするデータが適切に保護されていることを確認してください。

于 2012-08-01T17:09:30.510 に答える