C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++11でタイマーを作成する方法をわかりやすく解説

この記事では、C++11の機能を使ってタイマーを作成する方法を解説します。ここでは「later」というクラスを作成します。このクラスは、以下の3つの要素を受け取ります。

  • int型:コードを実行するまでの待機時間(ミリ秒)
  • bool型:trueの場合は即座に制御を返し、指定時間後に別スレッドでコードを実行します(非同期モード)
  • 可変引数:std::bindに渡す関数とその引数

なお、chrono::millisecondschrono::nanosecondschrono::microsecondsなどに変更すれば、タイマーの精度を自由に調整できます。

サンプルコード

#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("result of test 2: %d\n", a);
   return;
}
int main() {
   later later_test1(3000, false, &test1);
   later later_test2(1000, false, &test2, 75);
   later later_test3(3000, false, &test2, 101);
}

実行結果

$ g++ test.cpp -lpthread
$ ./a.out
result of test 2: 75
result of test 2: 101
$

このプログラムでは、最初の結果「result of test 2: 75」が1秒後に表示され、その3秒後に「result of test 2: 101」が表示されます。また、第2引数のasyncをtrueに設定すれば、メインスレッドをブロックせずに、指定時間経過後に別スレッドで処理を実行できるため、GUIアプリケーションなどで遅延処理を実装したい場合にも活用できます。

  1. Microsoft Accessでレポートを作成する方法【初心者向け完全ガイド】

    レポートとは、データを整理された形式でまとめて提示するためのツールで、通常は印刷して使用します。レポートとフォームはよく似ていますが、フォームはデータの表示・入力・編集を行い、レコードの詳細を画面上で確認するのに適しています。一方、レポートは情報の確認やデータの集計・グループ化に使用され、画面で閲覧することも可能ですが、一般的には印刷して使われることが多いものです。 Accessのレポート作成ツールの種類 レポート:現在のクエリやテーブルのデータをもとに、基本的なレポートを自動生成します。グループ化や合計の追加にも対応しています。 レポートデザイン:デザインビューで新しい空白のレポートを作成

  2. Microsoft Publisherで証明書を簡単に作成する方法【初心者向けステップガイド】

    素晴らしい活躍をしてくれた人に感謝を伝えたい、頑張りを称えたい——そんな場面は仕事、学校、家庭などさまざまなところにあります。Microsoft Publisherは、こうしたあらゆるシーンに対応できる証明書作成に最適なツールです。大人向けにも子ども向けにも、フォーマルな用途にもカジュアルな用途にも柔軟に使えるのが魅力です。 Publisherで作成する証明書は、誕生日や記念日、学校や職場での成果の表彰、感謝の気持ちを伝えるサンキューカード、従業員の表彰など、幅広い場面で活躍します。しかも低コストで手軽に作れるため、いざというときの頼れる選択肢になります。テンプレートは自由にカスタマイズでき、