相关疑难解决方法(0)

在信号处理程序中设置标志

在C++ 11中,在给定一种请求循环(作为Web请求循环的一部分)的情况下,对被捕获的信号执行不安全代码的最安全(并且是最有效的)方法是什么?例如,从linux命令行捕获SIGUSR1时:kill -30 <process pid>

"不安全代码"可以在下一个被触发的请求上运行,如果在运行不安全代码之前多次触发信号,则不会丢失任何信息.

例如,我目前的代码是:

static bool globalFlag = false;

void signalHandler(int sig_num, siginfo_t * info, void * context) {
    globalFlag = true;
}
void doUnsafeThings() {
    // thigns like std::vector push_back, new char[1024], set global vars, etc.
}
void doRegularThings() {
    // read filesystem, read global variables, etc.
}

void main(void) {

    // set up signal handler (for SIGUSR1) ...
    struct sigaction sigact;
    sigact.sa_sigaction = onSyncSignal;
    sigact.sa_flags = SA_RESTART | SA_SIGINFO;
    sigaction(SIGUSR1, &sigact, (struct sigaction *)NULL); …
Run Code Online (Sandbox Code Playgroud)

c++ unix linux posix c++11

3
推荐指数
1
解决办法
2153
查看次数

标签 统计

c++ ×1

c++11 ×1

linux ×1

posix ×1

unix ×1