- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好吧,不太确定这是内存损坏还是只是我的代码中的错误,但这是问题的描述:单线程程序注册一个SIGALRM处理程序:
struct sigaction action;
sigset_t blocked;
sigfillset(&blocked);
sigdelset(&blocked, SIGKILL);
sigdelset(&blocked, SIGSTOP);
action.sa_handler = &handler_function;
action.sa_flags = SA_RESTART;
action.sa_mask = blocked;
// We are not interested in the previous action:
if (sigaction(SIGALRM, &action, NULL) == -1)
....
handler_function 是一个简单的函数,它调用对象的函数:
void handler_function()
{
some_object->tick();
}
tick()
{
++variable;
}
变量的类型为长整型。我的程序只有一个 some_object 实例,只有信号处理程序调用函数 tik,并且只有 tik 函数修改变量。其他函数仅读取变量的值。忘了提及我创建了一个计时器:
struct timeval interval;
interval.tv_sec = 0;
interval.tv_usec = (100000);
struct itimerval timer;
timer.it_interval = interval;
timer.it_value = interval;
if (setitimer(ITIMER_REAL, &timer, NULL) == -1)
...
所以tick函数每秒触发10次。现在的问题是,我间歇性地得到对象 some_object 的其他数据成员损坏,它们是 POD 类型(长),即突然它们包含随机值。我尝试在小程序中隔离问题,但无济于事。任何建议将不胜感激。谢谢
最佳答案
您的套接字读取代码中存在缓冲区溢出。解决这个问题,问题就会消失。
关于linux - 使用 SIGALRM 和计时器时内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6272436/
我正在尝试编写一个基准测试来接收来自内核的信号,告诉它调整其参数。我正在尝试研究主动或被动方法是否最有效。 在主动方法中,我使用 setitimer 定期设置警报并强制基准测试查看其目前的性能并重新调
我有一个我自己似乎无法解决的问题。我正在编写一个小的 python 脚本,我想知道为什么我的 signal.alarm 在它所在的函数返回后仍然有效。这是代码: class AlarmExceptio
achul@achul:~/chennai/linux/SM_practise$ cat doubt.c #include #include main() { int ret; pri
我们正在尝试使用 sigaction 和 setitimer 从我们的三个函数中的 while(1) 循环中获取控制权,我们现在面临的问题是仅生成一次 SIGALRM,而下一次它不会生成,即我们能够从
我是信号的新手,我正在尝试在 UDP 回显服务上设置 SIGALRM,作为套接字编程实践。 所以这里我有一个 UDP 套接字,客户端向服务器发送一个字符串并等待响应(任何响应,这里的字符串由服务器回显
我是一个非常初级的程序员,我正在 Ubuntu 中开发客户端服务器程序。这段代码属于我的服务器文件,我想实现一个信号SIGALRM,但我不知道如何才能正确地做到这一点。我的目标是:在我调用信号 ala
我在做作业。 作业是在 Linux 系统(在 Ubuntu 上)上制作虚拟实时操作系统。 我的问题是 SIGALRM,它是调度程序的处理程序。 void scheduler(int signo) {
我是 Linux 信号的新手。如果一个进程初始化多个定时器,那么进程如何知道哪个 SIGALRM 属于哪个定时器? 最佳答案 这取决于您如何设置 SIGALRM 处理程序。 考虑不使用 alarm 而
这段代码有问题.. 我需要等待 (sigwait) 一个过程,直到到达两个信号 SIGUSR1/SIGUSR2 (也许我可以使用 sigalrm 捕捉信号?) #include #include
我需要在超时后中断系统调用(在本例中为 recvfrom)。为此,我正在使用 alarm(),但是生成的 SIGALRM 会终止我的进程,而不仅仅是中断系统调用。 我已经尝试调用 signal(SIG
我在使用 SIGALRM 时遇到了问题。我用它每 3 秒写一次事件进程的 pids。但是一旦它杀死主进程,它就会触发。我做错了什么?一段时间后,我还使用信号杀死每个子进程,我在那里使用 SIGTERM
因此,我尝试调用警报以每秒显示一条消息“仍在工作......”。我包含了 signal.h。 在我的 main 之外,我有我的功能:(我从不为 int 声明/定义 s) void display_me
我编写了这段代码,我必须使用警报信号 (SIGALRM) 让程序打印消息“我还活着”。每 3 秒一次。 但它不起作用,只有当我按下 CTR-C 时它才会发送消息“我还活着”,我猜我没有把 SIGALR
在处理类的系统调用时,我遇到了以下代码的麻烦。无论出于何种原因,当信号处理程序中的 print 语句末尾有换行符时,它会按预期运行,接收和处理信号并显示消息。但是,当换行符不存在时,根本不会显示任何输
我有一个问题。我需要实现一个使用计时器和 SIGALRM 切换 ucontext 线程的程序,但是当我使用 evict_thread 函数切换线程时出现段错误。我相信这是竞争条件的结果,因为它发生在程
所以基本上我的程序中有 4-5 个函数。这是很多行代码,需要从文件中读取和写入,并且可能会以无限循环结束(更糟糕的情况),如果超过 20 秒,我想终止我的程序。下面的代码不起作用,我的程序挂起,操作系
嗨,我正在尝试了解有关信号的更多信息,我编写了一个简单的代码,该代码应该只打印“再见”发送警报信号的所有内容。我正在使用 sigaction 来设置它。但是,我在错误检查中不断返回 NULL,有人可以
我目前正在使用 select() 作为计时器。我有一个循环内发生的网络接收操作,每隔几秒需要发生一个处理操作。 因此,select() 语句的超时不断变化——随时间减少到零,然后从 3 重新开始。 r
好吧,不太确定这是内存损坏还是只是我的代码中的错误,但这是问题的描述:单线程程序注册一个SIGALRM处理程序: struct sigaction action; sigset_t blocked;
我有一个 C 程序,如果 n 作为参数传递,它会计算前 n 个素数。 $ ./prime 5 2 3 5 7 11 如果我可以给程序的进程SIGALRM,程序的逻辑允许我进入一个想要的函数。 所以基本
我是一名优秀的程序员,十分优秀!