state和程序退出

166 阅读1分钟

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; }

所以,

  1. 如果主程序有自己的while循环,需要根据这个state判断cyber::OK()后退出。
while (cyber::OK()) {
  }
return 0;
  1. 如果主程序只是启动其他线程后处于等待状态,可以直接调用cyber::WaitForShutdown() WaitForShutdown实现如下,内部也会用IsShutdown去检查state
inline void WaitForShutdown() {

  while (!IsShutdown()) {

    std::this_thread::sleep_for(std::chrono::milliseconds(200));

  }

}