问题标签 [signals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
3731 浏览

c++ - 多线程:Signal vs BusyWait(Polling),线程间条件变量问题

我有一个关于线程间通信的一般问题。

现在我正在使用一堆 C++ 线程(~15)。

他们都在使用 BusyWait(轮询)彼此来获取要处理的数据。但是很难保持较低的 CPU 使用率 && 提供良好的性能并避免进行过多的上下文切换。

所以我正在查看条件变量和信号。我想我理解线程进入 .Wait() 的一般概念,等待另一个线程调用 .Signal()。

问题#1)我的问题可能是概念性的,但是如果等待信号的线程在等待时被挂起,它自己就无法执行任何操作。反正有没有让它自己醒来执行一些动作。

问题 #2)此外,我的课程用于双向传递数据。但是如果中间类正在等待另一个类的信号,它就无法向那个类发送信号。如:

因此,如果 B 类为来自 C 的 .Signal() 开启 .Wait(),则它无法处理来自 A 的新信号。

A && C 是否有可能发送相同的“newData”信号 B 来唤醒它?是否有可能将信号与 A && C 区分开来。

我正在使用 C++ 使用 ACE 框架进行编码,并且可能会切换到 Boost。但我想这足够通用,我可以将答案应用于任何操作系统(希望如此)。

谢谢

0 投票
3 回答
1123 浏览

c++ - 信号系统调用可以与类的 C++ 静态成员一起使用吗?

*nix 平台是否支持以下内容?

0 投票
3 回答
2024 浏览

c++ - 如何将数据从线程传递到父进程?

我有一个使用单线程库的主进程,我只能使用主进程中的库函数。我有一个由父进程生成的线程,它将从网络接收到的信息放入队列中。

我需要能够告诉主进程有东西在队列中。然后它可以访问队列并处理对象。线程无法处理这些对象,因为该库只能由一个进程调用。

我想我需要使用管道和信号。我还从各种新闻组中了解到我需要使用“自我欺骗”管道。

这个场景应该如何实现?

以下帖子的更具体案例:

unix管道如何在主进程和线程之间使用?

0 投票
6 回答
9686 浏览

makefile - 如何在 GNU make 中捕获错误和中断?

我想知道是否有一种方法可以trap在 GNU中实现make,类似于内置的BASH

如果用户按下CTRL-C,或者如果make它本身失败(非零退出),我想调用一个特定的目标或宏。

0 投票
1 回答
2984 浏览

linux - 在 Linux 中处理 /dev/tty 设备上的用户中断(UART 中断)

这是一些代码示例,但问题是当使用“putty”通过串行线路发送“中断”时,不会调用信号处理程序。

这是我的 stty 设置:

我错过了什么/为什么我没有收到信号?我正在使用 USB-2-Serial 转换器,我可以看到中断已发送,但在此客户端上根本没有触发任何内容。

0 投票
3 回答
2552 浏览

django - 当 commit=False 时调用 Django pre_save 信号

我正在编写一个 Django 应用程序,它将以类似于管理界面的方式跟踪模型的更改。例如,我将能够显示对模型的更改列表,看起来像Changed Status from Open to Closed.

我正在使用 pre_save 信号来执行此操作,比较数据库中现有项目和正在保存的“实例”之间的相关字段。要获得现有项目,我必须这样做sender._default_manager.get(pk=sender.pk)看起来有点乱,但那部分有效。

问题是,更改此模型的视图调用save()表单上的方法两次(第一次使用 commit=False) - 这意味着数据库中记录了 2 次更改,因为 pre_save 信号被发出两次。

有什么办法可以做到这一点吗?也许以完全不同的方式,虽然我记得读过 Django 管理应用程序使用信号来跟踪用户所做的更改。

0 投票
2 回答
268 浏览

c - 进程如何知道它何时被后台处理?

当我 scp 一个文件时,我可以用 ^Z 停止它并将它放在后台。当它在后台时,它会停止打印其进度,但复制会继续。如果我再次将其置于前台,它将继续打印。它是怎么知道的?看头?这会发生在标准的ptty上吗?

0 投票
3 回答
3902 浏览

c++ - 打印以记录核心转储文件堆栈,C++ over windows?

当我的进程崩溃时,如何通过 Windows 打印以记录核心转储文件堆栈、C++?我知道在 Unix 中有一种方法可以使用一些信号处理程序来做到这一点,但我自己从来没有这样做过。我如何在 Windows 中做到这一点(不喜欢使用 ACE)?

谢谢。

0 投票
2 回答
2865 浏览

c - 信号不能通过 execv() 正确重新启用

我正在为我正在开发的 Linux 发行版编写一个系统关键程序。它需要在接收到某些信号时自行重启,以避免崩溃。问题是,重新启动后,我无法重新启用该信号。即,信号不能被接收两次。在 execv()'ing 自身之后,当新进程调用 signal() 来设置信号时,返回 SIG_DFL。每次。即使我连续两次调用它——表明它从来没有被设置在首位。是否从原始过程中继承了一些奇怪的标志?

0 投票
8 回答
8670 浏览

java - Java 错误:java.lang.IllegalArgumentException:VM 已使用的信号:INT

我正在调查 Red Hat Linux 上的 Java 问题(使用 IBM JVM 1.4.2 64 位)。我想知道是否有人以前看过此错误消息并知道是否有解决此问题的方法?

资源:

输出:

附加信息:

我发现了一些奇怪的东西。它失败的原因是因为我在 shell 脚本中作为后台进程运行程序。

即sigtest.sh:

如果我从命令行运行程序,或者删除“&”(即在 shell 脚本中使其成为前台进程),它没有问题......我不明白为什么会这样。