【问题标题】:Timer tick event in C++ , LinuxC++,Linux中的定时器滴答事件
【发布时间】:2014-02-14 11:31:27
【问题描述】:

请朋友们帮帮我。我只想实现一个定时器事件功能。让我适当地描述一下。

在 main 函数中将运行一个连续的操作(假设在 while(1) 循环中打印)。

但应该有另一个函数将在一定的时间间隔后重复调用(假设为 2 秒)。但是不应因此而妨碍在 main 函数中执行的操作。我想我必须在这里实现线程。

这就像 Visual Studio 中的刻度事件。

我想要它在 C++ gcc 或 g++ 编译器中。

【问题讨论】:

    标签: c++ multithreading timer


    【解决方案1】:

    您可以使用此代码自己跟踪时间:

    首先,一个辅助函数

    double GetSeconds()
    {
        struct timeval Time;
        gettimeofday( &Time, NULL );
        int64_t T = Time.tv_usec + Time.tv_sec * 1000000;
        return static_cast<double>( T ) / 1000000.0;
    }
    

    以及使用它的主要代码,基本上是一个忙循环:

    const double EventTime = 2.0; // seconds
    
    double StartTime = GetSeconds();
    
    while (...)
    {
       double T = GetSeconds();
       double DeltaTime = T-StartTime;
    
       if ( DeltaTime > EventTime )
       {
          FireEvent();
          StartTime = T;
       }
    }
    

    您可以在单独的线程中运行此循环,也可以将其与while (1) 循环交错。选择权在你。

    如果是线程,可以参考本教程:Posix thread tutorial

    【讨论】:

    • 其实这是我的错,我给出了一个while(1)的例子。实际上,情况并非完全如此。程序的主控可以去任何地方。它可以退出那个while循环,甚至可以进入任何其他函数。该程序的控制可以在任何其他功能之间循环。但是计时器事件只会在 2 秒间隔后重复触发,它会给我一个通知,它会在 2 秒间隔内被调用多次。这就是我想要的。
    • 我对 C++ 线程不熟悉。我知道 C# 和 Java 线程,但不知道 C++ 线程
    • @Ankur:我添加了一个链接到我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多