cyber程序,按ctrl+c无法退出
cyber用std::signal注册了ctrl+c响应函数,
bool Init(const char* binary_name) {
std::signal(SIGINT, OnShutdown);
}
In OnShutdown,把状态state设为STATE_SHUTTING_DOWN:
void OnShutdown(int sig) {
if (GetState() != STATE_SHUTDOWN) {
SetState(STATE_SHUTTING_DOWN);
}
}
cyber::OK()会检查state:
inline bool OK() { return GetState() == STATE_INITIALIZED; }
所以,
- 如果主程序有自己的while循环,需要根据这个state判断cyber::OK()后退出。
while (cyber::OK()) {
}
return 0;
- 如果主程序只是启动其他线程后处于等待状态,可以直接调用
cyber::WaitForShutdown()WaitForShutdown实现如下,内部也会用IsShutdown去检查state。
inline void WaitForShutdown() {
while (!IsShutdown()) {
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
}