可以在事件处理函数中删除 POSIX 计时器吗?

2024-03-01

问题

如果我打电话create_timerSIGEV_THREAD常量存储在sigev_notify我的领域sigevent结构,那么当计时器事件发生时,我的sigev_notify_function回调将被调用。

调用是否有任何隐藏的含义或不良副作用timer_delete 从我的回调函数中?

具体问题

我最初的想法是应该没问题。但是,我并不完全理解在幕后操作的机制,并且我担心如果在处理完成之前删除计时器及其关联结构,是否会正确清理回调的线程并处理信号。

背景

另一位SO用户问这个问题 https://stackoverflow.com/q/29799925/2615940,本质上是说,“我真的需要在调用后删除我的计时器吗?timer_create?我的回答是响亮的yes。然后他在评论中提出了一个后续问题:“可以从计时器回调函数中执行此操作吗?”我对此没有一个好的答案。


根据sigevent(7) http://man7.org/linux/man-pages/man7/sigevent.7.html,当你使用SIGEV_THREAD,回调按以下方式执行:

通过调用通知进程sigev_notify_function“好像”是 新线程的启动函数。 (其中实施 这里的可能性是每个计时器通知都可能导致 创建一个新线程,或者创建一个线程 接收所有通知。)

据您(程序员)所知,您的通知函数正在新线程的上下文中执行,not在中断另一个线程执行的标准信号处理程序例程的上​​下文中。因此,异步信号安全函数的规则不适用,这与 Basile 的答案中提到的相反,因此您可以在使用时在通知函数中做任何您想做的事情SIGEV_THREAD与你的计时器。这包括调用timer_delete删除timer_t.

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

可以在事件处理函数中删除 POSIX 计时器吗? 的相关文章

  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • 应用程序首次启动时调用 didReceiveRemoteNotification

    我已经实现了 didReceiveRemoteNotification 方法 它工作并显示一个视图控制器以及传递的通知数据 仅当应用程序已在前台或在后台运行时 此功能才有效 但是 当应用程序未运行并且用户单击通知时 应用程序会启动 但看起来
  • 进程监控 CreateProcessNotifyRoutineEx

    我正在开发一个用于监视进程创建的驱动程序 我编写了一个简单的代码来完成它 我用PsSetCreateProcessNotifyRoutineEx 但这行不通 我完全遵循微软的帮助在这个链接上 http msdn microsoft com
  • Boost Beast 在关闭后重新连接 websocket 连接

    我正在使用 boost beast 创建 websocket 连接 到目前为止它似乎工作正常 但我无法弄清楚断开连接后是否应该替换 websocket stream 变量 即我有一个变量 boost beast websocket stre
  • 有没有办法在 C 中使用具有常量索引的常量数组作为 switch case 标签?

    我有一些常量值和数组定义它们的标签和哈希码 例如 define LABEL A 0 or const int LABEL A 0 define LABEL B 1 define LABEL C 2 define LABEL D 3 cons
  • 获取 Google 表单脚本生成的电子邮件以将数据传输到响应表中

    我目前正在尝试设置审批工作流程 对于这些事情 我还相当初级 但到目前为止 在示例的帮助下 它已经达到了可观的水平 可以满足我们的需求 我正在使用来自的模板 示例使用 Google 脚本和表单进行电子邮件批准 https sites goog
  • 无法删除 S3 存储桶 - 错误未找到数据

    我无法摆脱 S3 中的五个桶 AWS 控制台中的每个屏幕都会显示 未找到错误数据 即概述 属性 权限 管理 访问点 我无法设置生命周期删除对象的规则 但存储桶中从未有过任何内容 而且版本控制也从未启用 我也尝试过在我的终端中强制它 aws
  • Qt 4.8 beta 和 Mac OSX Lion,Phonon 错误

    成功安装 mac OS 10 7 后 我尝试编译我的 qt 4 7 项目 我收到了很多 不支持的 mac os x 版本 的警告 因此我决定使用 Qt 4 8 beta 现在所有警告都消失了 但是 我现在使用 Phonon 时遇到链接器问题
  • 为什么window.width小于媒体查询中设置的视口宽度

    我很困惑 仍然不知道如何用合适的语言解释这一点 到目前为止 我已经使用断点并设置了媒体查询 使用的断点变量如下所示 menustatictofixed min width 900px breakpoint to ems 设置为 true 我
  • 错误:“...”未命名类型

    我有一个工作项目 重新安排一些代码后 我尝试重新编译我的项目 然后奇怪的事情开始发生 看一下编译器输出的摘录 我正在使用 MinGW G 从 Windows 上的 Eclipse 进行编译 Build of configuration De
  • 术语“Scaffold-DbContext”未被识别为 cmdlet 的名称

    我有一个包含两个项目的解决方案 一个是主项目 第二个是使用 EF Core 10 0 RC2 的项目 在第二个项目中 我使用这三个命令来安装 EF Core 并运行此 nuget 命令来安装它 Install Package Microso
  • 查找列表列表中项目的部分匹配

    我有这样的列表 l 08 00 09 00 60 False 1 0 09 00 10 00 60 False 0 3 12 00 13 00 60 False 2 0 我想检查是否有列表l有一个元素但我不知道最后一个元素的值float 我
  • 如何在 R 中使用 readHTMLTable 读取注释掉的 HTML 表

    过去 我已经能够使用 R 中的 readHTMLTable 来获取一些足球统计数据 当今年再次尝试这样做时 表格没有显示 即使它们在网页上可见 这是一个例子 http www pro football reference com boxsc
  • 从控制器构造函数中的 URL 获取参数

    我需要编写一些代码来在项目数据库中查找 ID 用户耦合到一个项目 并且所有项目都与其他对象 例如会话 有很多连接 现在 我需要在运行任何操作之前检查尝试访问会话的用户是否连接到与会话连接的同一项目 为此 我想在操作上使用 属性 MVC 创建
  • MySQL:仅在满足条件时更新字段

    是否可以在 MySQL 上执行 UPDATE 查询 仅在满足特定条件时才更新字段值 像这样的事情 UPDATE test SET CASE WHEN true THEN field 1 END WHERE id 123 换句话说 字段 仅在
  • maven antrun 插件

    我的 pom 中有以下内容
  • React Hooks 中的 Push 方法(useState)?

    如何将元素推送到 useState 数组 React hook 中 这是反应状态下的旧方法吗 或者新的东西 E g setState 推送示例 https stackoverflow com questions 41052598 react
  • 默认情况下,Spring Boot 期望视图存储在哪里?

    我正在尝试使用 Spring Boot 重写我的配置繁重的普通 Spring MVC 项目 我使用 Spring Boot Initiaizer 在 IntelliJ 中启动了一个全新的 Spring Boot 项目 并且我将采用基于 Ja
  • pandas groupby 一次用于多个数据帧/文件

    我有多个巨大的 tsv 文件 我正在尝试使用 pandas 处理它们 我想按 col3 和 col5 分组 我试过这个 import pandas as pd df pd read csv filename txt sep t g2 df
  • Web API 将对象传递给 Get 方法

    有没有办法在 Web API 的 Get 方法中将对象作为参数传递 我有以下案例 在我的 Web API 项目中 Get 方法如下所示 public IEnumerable
  • 可以在事件处理函数中删除 POSIX 计时器吗?

    问题 如果我打电话create timer与SIGEV THREAD常量存储在sigev notify我的领域sigevent结构 那么当计时器事件发生时 我的sigev notify function回调将被调用 调用是否有任何隐藏的含义