c++ - 用C/C++实现执行超时

标签 c++ c linux timeout execution

我一直在考虑在我的代码中实现一个执行超时机制。我浏览寻找建议,但我所看到的只是为其他被调用的程序实现执行超时,这完全不是我的想法。

我在 Linux 上使用 C/C++。

在不使用外部库的情况下完成此任务的最佳方法是什么?我认为也许运行一个单独的线程,在超时时向进程 ID 发送一个 TERM 信号,然后程序处理它并退出,但我不知道这在良好实践方面是否正确。

你会如何实现它?

提前致谢

最佳答案

您可以使用 setitimer(2)在 Linux 上在给定的时间后获得 SIGVTALRM

这是设置计时器的方式:

#include <sys/time.h>

/* Start a timer that expires after 2.5 seconds */
struct itimerval timer;
timer.it_value.tv_sec = 2;
timer.it_value.tv_usec = 500000;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 0;
setitimer (ITIMER_VIRTUAL, &timer, 0);

请注意,SIGVTALRM 的默认处理程序将因错误而终止您的程序。 它在技术上是可行的,但如果你想干净地处理它,你可以像这样安装一个信号处理程序:

#include <signal.h>
#include <stdio.h>
#include <string.h>

void timer_handler (int signum)
{
    printf ("Timed out!\n");
}

/* Install timer_handler as the signal handler for SIGVTALRM. */
struct sigaction sa;
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &timer_handler;
sigaction (SIGVTALRM, &sa, 0);

当然这只适用于 Linux(也许适用于 Mac/BSD)。

关于c++ - 用C/C++实现执行超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28896388/

相关文章:

c - 如何修复运行时错误: load of null pointer of type 'const char

linux - 如何使用 Grep 命令查找文本文件中的特定值

linux - 获取函数指针以在我没有直接加载的共享库中运行

C++ program.exe 从二进制文件读取后停止工作

c++ - MATLAB 并行工具箱,remoteParallelFunction : RUNTIME_ERROR during function evaluation

c++ - 仅在根节点上运行回调

c - 如何将 PPM 文件读入标准输入

c++ - 在动态分配内存时使用指定大小

c - 如何处理 stat 和后续 mmap 之间的文件大小变化?

c++ - 多个对象的 MMAP 共享