c++ - 使用 dlib 检测器时信号处理不正确
问题描述
我尝试在主线程中阻塞一些信号,然后创建一个专用线程来通过 sigwait 获取这些信号。之后,在主线程中我尝试使用 dlib 正面人脸检测器。如果我注释掉面部检测器的使用,那么我的代码可以正常工作,但是使用检测器,程序会因任何信号而终止。我的源代码(dlib 19.19):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <thread>
#include <dlib/image_processing/frontal_face_detector.h>
int main(int argc, char *argv[])
{
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGINT);
sigaddset(&set, SIGUSR1);
sigaddset(&set, SIGUSR2);
pthread_sigmask(SIG_BLOCK, &set, NULL);
auto t = std::thread([&set]() {
for (int sig = -1; sig != SIGINT; ) {
sigwait(&set, &sig);
printf("Signal handling thread got signal %d\n", sig);
}
});
//auto d = dlib::get_frontal_face_detector();
t.join();
}
此外,这段代码运行良好:
void handler(int sig, siginfo_t *, void *)
{
printf("Signal %d\n", sig);
}
int main(int argc, char *argv[])
{
struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sa.sa_sigaction = handler;
sigaction(SIGUSR1, &sa, NULL);
sigaction(SIGUSR2, &sa, NULL);
sigaction(SIGINT, &sa, NULL);
auto d = dlib::get_frontal_face_detector();
pause();
}
解决方案
推荐阅读
- javascript - 我正在尝试以与 botactivityHandler.js 中的“hello”命令相同的方式在机器人中添加一个额外的“再见”命令我收到错误消息
- ios - 何时在 iOS 中使用动态链接库?在 iOS 中使用动态库有什么好处?
- python - Jupyter Notebook iPython中的乳胶
- ruby-on-rails - Rails Minitest 添加了额外的固定装置
- electron - 电子 NSIS 问题
- javascript - React 没有使用 setState 挂载选项标签
- python - 从(抽象)类属性派生的类属性
- python - 为什么实例对象和类对象之间的方法id不一样?
- android - 自动填充在 android 应用程序中找不到视图 ID
- r - 如何为数据框中的 S3 类获取自定义格式/打印?