【问题标题】:How timer is getting set for Thread如何为 Thread 设置计时器
【发布时间】:2020-02-25 10:19:02
【问题描述】:

在我的项目中,我看到在另一个线程下创建一个线程,并在我们调用启动计时器的最低子线程的函数内创建一个线程

its.it_value.tv_sec = timeout / 1000;
        its.it_value.tv_nsec = freq_nanosecs % 1000000000;
        its.it_interval.tv_sec = its.it_value.tv_sec;
        its.it_interval.tv_nsec = its.it_value.tv_nsec;

        (void)(timerfd_settime(m_timerHandleThread->m_fd, 0, &its, NULL));

我怀疑timerfd_settime这个函数会设置当前线程的计时器吗?如果是,请澄清设置计时器的含义是什么?是不是这个线程会在一段时间后自动停止,还是会停止并重新启动?如果是,谁将杀死谁将启动线程

【问题讨论】:

  • 你读过timerfd_settime man page吗?或者对该函数的作用进行任何研究,或搜索一些有关如何使用它的示例?
  • timerfds 与线程无关。

标签: c multithreading timer pthreads


【解决方案1】:

timerfd_settime 设置与文件描述符m_timerHandleThread->m_fd 关联的内核计时器对象。在计时器到期时,m_timerHandleThread->m_fd 准备好读取。

如果您不在计时器文件描述符上readpoll/epoll,则不会发生任何事情。

您应该阅读timerfd_settime 文档。

【讨论】:

  • 正如你所说的“在计时器到期时 m_timerHandleThread->m_fd 准备好读取”。这意味着“m_timerHandleThread->m_fd”在计时器到期之前不可读我正确吗?这意味着我们不能在线程内的其他函数中访问它
  • @TuhinPanda 阅读man7.org/linux/man-pages/man2/select.2.htmlready for read的含义@
猜你喜欢
  • 2020-01-05
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
相关资源
最近更新 更多