首页 > 解决方案 > 使用 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();
}

标签: c++dlib

解决方案


推荐阅读