【问题标题】:how to send a flag each X minutes?如何每 X 分钟发送一个标志?
【发布时间】:2013-01-11 15:53:24
【问题描述】:

我在一种“控制块”中工作,它必须每 6 分钟发送一个标志。问题是我不知道是否有一种简单的方法可以做到这一点。我已经在循环中使用clock_t,直到它达到6分钟,然后调用一个发送标志并重新初始化clock_t变量的方法。

我忘记解释了,睡眠不是一个选项,因为这个块就像一个流一样工作,它必须一直发送一些东西。实际上,标志会改变发送的内容

提前致谢

【问题讨论】:

  • sleep-ing 单独开一个线程怎么样?

标签: c++ measurement


【解决方案1】:

你可以让线程休眠 6 分钟,然后发送标志:

for(;;)
{
    sendFlag();
    sleep(6*60);
}

Here are some options for the sleep method,包括C++11的std::this_thread::sleep_for

【讨论】:

  • 感谢您的回答。我忘了解释什么,睡眠不是一个选项,因为这个块就像一个流一样工作,它必须一直发送一些东西。实际上,标志会改变发送的内容
  • @xuandl:Luchian 的解决方案不会阻止您这样做,因为 sleep 在单独的线程下运行,但这确实意味着您需要了解多线程和线程同步。从您的问题中不清楚您是否对此有所期待。
【解决方案2】:

您可以简单地使用一个线程函数来打开或关闭标志,并一次使其休眠 6 分钟。例如:

bool flag = false;

int main() {
    while(true) {
        if (flag == true) {
            flag = false;
        }
    }

    return(0);
}

void threadFunc() {
    flag = true;
    sleep(360); //360 seconds is 6 minutes
}

注意:您需要使用互斥锁或信号量,因为现在编写的代码不是线程安全的。您如何使用线程也取决于操作系统。当然,除非你使用 C++11。

【讨论】:

    【解决方案3】:

    你不需要一个完整的线程来做这个。使用系统操作系统定期定时器回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多