每次删除定时器都需要调用timer_delete吗?

2024-03-05

I used timer_create()在下面的代码中。它只会在 10 秒后触发一次处理程序。

struct itimerspec itimer = { { 0, 0 }, { 10, 0 } };
struct sigevent si;

memset (&si, 0, sizeof (struct sigevent));
si.sigev_notify = SIGEV_THREAD;
si.sigev_notify_attributes = NULL;
si.sigev_notify_function = t;

if (timer_create (CLOCK_REALTIME, &si, &timer) < 0)
{
    fprintf (stderr, "[%d]: %s\n", __LINE__, strerror (errno));
    exit (errno);
}
if (timer_settime (timer, 0, &itimer, NULL) < 0)
{
    fprintf (stderr, "[%d]: %s\n", __LINE__, strerror (errno));
    exit (errno);
}

我的问题是,10 秒后我的处理程序被触发 - 现在我是否必须使用删除计时器timer_delete()在退出进程之前?或者,既然只触发一次,是不是就不需要显式删除呢?


是的,您需要显式删除计时器。

看看timer_create 的 man(2) 页面 http://man7.org/linux/man-pages/man2/timer_create.2.html。在注释部分(特别是第三个注释),您将看到每次调用timer_create使用内核中的资源以及定时器总数all内核可以一次性分配的进程是有限的。

如果您不删除计时器,您最终将用完它们并且任何需要分配计时器的应用程序都可能会失败。

这就像内存泄漏一样 - 清理你使用的资源,否则你最终会耗尽。

回复您的后续问题
在下面的评论中,您询问是否可以打电话timer_delete从你的回调函数内部。我不知道如何回答,所以我打开了我自己对此提出疑问 https://stackoverflow.com/q/29803394/2615940。答案似乎是maybe。您可以尝试尝试一下,看看它是否有效,但我建议不要这样做。我从未见过任何从回调中删除计时器的代码,并且在事件处理完成之前释放计时器资源的想法让我感到紧张。

此外,测试它有时可能会产生良好的结果,但由于您正在处理异步事件,因此会出现随机失败。此外,您的主程序需要运行直到回调完成(它们在同一进程中运行,只是不同的线程),因此您也可以在退出之前删除主线程中的计时器。我认为这是更安全的解决方案,并且更容易调试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每次删除定时器都需要调用timer_delete吗? 的相关文章

随机推荐

  • 如何在 JavaFX 中围绕自定义枢轴旋转对象?

    我想围绕自定义枢轴旋转一个对象 这就是它的重点 所以我有这样的代码 private final EventHandler
  • 根据字段值更改奏鸣曲管理包中的行颜色

    我有奏鸣曲管理包 但无法弄清楚如何根据表单模板中的字段值更改样式 例如字段难度 难度值越高 记录行的颜色应该越红 我怎样才能做到这一点 我花了几个小时来理解奏鸣曲中的树枝模板 但是我读这个模板越多 我就越感到困惑 模板之间存在块调用 并且不
  • 通过元编程将c++简化为objective-c/cocoa桥接?

    在纯 C 世界中 我们可以结合使用基于模板的编译时和运行时技术 在编译时生成不同组件或接口之间的接口或粘合代码 例如 大多数情况下自动编组到使用旧类型的调用 从调用中编组 然而 当必须将 C 应用程序与 Objective C Cocoa
  • Envers:单向 OneToMany 无需额外审核表?

    以下数据库架构 员工 EMP ID PK 姓名 工资 电话 ID PK number str OWNER ID FK Employee aud EMP ID PK REV PK FK REVTYPE 姓名 工资 Phone aud ID P
  • easyphp 和 .htaccess

    我需要 EasyPHP 和 htaccess 的帮助 htaccess 文件不起作用 我认为这是因为我没有使用 EasyPHP 设置某些内容 我的 EasyPHP 版本是5 3 8 1 也许有人知道如何解决这个问题 htaccess 文件
  • 从另一个 cython 包的 cdef 类内联 cdef 方法

    我有一个 cython 类 如下所示 cdef class Cls cdef func1 self pass 如果我在另一个库中使用此类 我是否能够内联 func1 这是一个类方法 或者我应该找到解决方法 例如 通过创建一个将 Cls 指针
  • Flutter中间隔自动获取Api数据

    在我的扑动应用程序中 我试图显示更新数据 我成功地手动从天气 api 获取数据 但我需要不断地每5秒抓取一次数据 所以应该会自动更新 这是我在 Flutter 中的代码 class MyApp extends StatelessWidget
  • R中系统投资利息计算的代码[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 假设我每月在银行存入 1000 P 美元 为期 60 n 个月 银行每月向我支付 1 利率 作为利息 因此我可以计算每笔存款的利息 P 1
  • macOS:是否可以检测何时按下 Mac 键盘上的“fn”键?

    我很好奇是否可以检测何时按下 Mac 键盘上的 fn 键 无论是单独使用还是与另一个键组合使用 有没有办法做到这一点 我愿意使用任何类型的方法 包括必要时未记录的 Apple API 当按下 Fn 键时 所有键盘 NSEvents 的 mo
  • python 列出数字

    我需要在 python 中打印所有数字列表 到目前为止我写了这个 def lists listNum i if i len listNum 1 print listNum else for j in range i len listNum
  • 检测不同浏览器下安装的插件?

    我想知道是否有一种方法可以检测不同浏览器上安装的插件 到目前为止 我发现您可以通过尝试猜测 chrome path to some plugin image gif 是否存在来 检测 Firefox 上的插件 Firefox 的代码如下所示
  • web.config 中的表单身份验证

    我正在使用 MVC3 并将用户身份验证放在 web config 文件中 这是为了绕过 sqlserver 身份验证 web config中的代码如下
  • 如何在过程宏中确定编译属性?

    我正在开发一个程序宏 它做了很多工作 可以大大减慢编译速度 所做的工作不会影响函数的语义 也就是说 如果给定相同的参数集 则返回值不会根据是否应用宏而改变 为了使编辑 比较 测试循环更快 我想根据与包的编译方式相关的条件使宏成为无操作 我希
  • setReadOnly 不起作用

    我在用setReadOnly方法使我的应用程序目录存储在我的 SD 卡上 只读 然而 即使我为应用程序提供了以下内容 调用此方法时也会返回 false android permission WRITE EXTERNAL STORAGE清单中
  • Laravel 5 Eloquent,如何动态设置强制转换属性

    在 laravel 5 1 中 有一个名为 Attribute Casting 的新功能 详细记录在此处 http laravel com docs 5 1 eloquent mutators attribute casting http
  • 在创建窗口句柄之前,无法在控件上调用 VB.NET Invoke,但句柄已创建

    这是我的情况 有2个班级和我的主要表格Form1 Class1 有一个方法 doSomethingAndCall callback 它创建一个新线程 Class2 具有动态创建的控件 带有触发 Class1 doSomethingAndCa
  • 如何使用 js 或 jQuery 将自定义 HTTP 标头添加到 ajax 请求

    有谁知道如何使用 JavaScript 或 jQuery 添加或创建自定义 HTTP 标头 我正在使用下面的代码 但它给了我405 不允许的方法 我在用POST方法但在请求方法中但它向我展示OPTION在请求方法中 状态代码 405 方法不
  • Angular 2.0.0 - 测试“由模块‘DynamicTestModule’导入”

    我在 Angular 2 中测试 app component ts 时遇到问题 我使用的是 angular cli 每当我运行 ng test 时 我的 app component spec ts 都会使控制台提示错误 Failed Une
  • 对于 Web 开发商店(10+)来说,Symfony 是否是比 Zend 更好的选择,因为它是一个全栈框架? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我的工作团队正在考虑使用一个框架来开发网站和应用程序 一些前辈确信我们应该使用 Zend Framework 因为它更容易挑选功能 因此我们的框
  • 每次删除定时器都需要调用timer_delete吗?

    I used timer create 在下面的代码中 它只会在 10 秒后触发一次处理程序 struct itimerspec itimer 0 0 10 0 struct sigevent si memset si 0 sizeof s