int SignalWaitForTermination(){ sigset_t ss; int ret; int signo; sigemptyset(&ss); ret = sigaddset(&ss, SIGHUP); if(ret != 0){ perror("sigaddset/SIGHUP"); return -1; } ret = sigaddset(&ss, SIGINT); if(ret != 0){ perror("sigaddset/SIGINT"); return -1; } ret = sigaddset(&ss, SIGTERM); if(ret != 0){ perror("sigaddset/SIGTERM"); return -1; } ret = pthread_sigmask(SIG_BLOCK, &ss, NULL); if(ret != 0){ perror("sigprocmask"); return -1; } while(1){ ret = sigwait(&ss, &signo); if(signo == SIGHUP || signo == SIGINT || signo == SIGTERM ){ break; } } SetStopFlag(); }
virtual void OnCancel() override { SetStopFlag(); }