【问题标题】:C++ timer with only pthreads只有 pthread 的 C++ 计时器
【发布时间】:2013-05-10 21:14:34
【问题描述】:

有没有办法用纯 C/C++ 编写计时器,只使用 pthreads 既不是 boost 也不是 Qt。 我希望操作系统只运行相关线程中的函数(例如 MyThreadClass.myfunction())。我不想检查每个线程中的信号(必须有一种类型的线程检查时间)。计时器线程必须在该时间尽快运行(通过中断其他进程和线程),并且能够计算在它不运行时经过的时间。并且它不能使用 while(true) 之类的循环,我不想让 CPU 忙。

例如,我将线程设置为在 100 毫秒内运行。它进入背景并检查时间。它应该频繁但短暂地运行。在 100 毫秒时,它将中断线程并运行特定功能。

【问题讨论】:

  • 你应该定义“它将中断线程”对你意味着什么。您还应该告诉我们是否可以使用其他东西(例如 Linux 系统调用)。
  • 那么,你想定期运行一些函数吗?
  • 服务器运行基于 Linux 的操作系统,因此我们可以使用系统调用(但如果有任何 POSIX 标准调用,我更喜欢它们)。说中断是指立即通知或运行计时器线程
  • 是的,但我想在实时后最短的时间内完成。
  • @10qn:如果你创建一个线程并给它实时调度类,然后在该线程中创建一个计时器,操作系统将尽最大努力在预定的时间运行它,最少延迟。您可能需要在实际所需的超时之前将超时值设置为纳秒或微秒,以确保线程在需要时唤醒,因为计时器规范总是在请求的时间或之后唤醒。

标签: c++ c pthreads


【解决方案1】:

您必须更具体地说明为什么只需要使用 pthread。以下使用librt,它是大多数 POSIX 系统上包含的系统库的一部分。

听起来您想将timer_createSIGEV_THREAD 参数一起使用。这将在计时器到期时创建一个线程并运行指定的函数。

【讨论】:

  • 原因是我在一个非常严格的服务器系统上工作。而且我无法编译我的库,因为我的空间非常小,无法编译像 boost 这样的库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
相关资源
最近更新 更多