示例#1
0
文件: wdtCmdLine.cpp 项目: npk/wdt
void setUpAbort(WdtBase &senderOrReceiver) {
  int abortSeconds = FLAGS_abort_after_seconds;
  LOG(INFO) << "Setting up abort " << abortSeconds << " seconds.";
  if (abortSeconds <= 0) {
    return;
  }
  static std::atomic<bool> abortTrigger{false};
  static WdtAbortChecker chkr(abortTrigger);
  senderOrReceiver.setAbortChecker(&chkr);
  auto lambda = [=] {
    LOG(INFO) << "Will abort in " << abortSeconds << " seconds.";
    std::unique_lock<std::mutex> lk(abortMutex);
    if (abortCondVar.wait_for(lk, std::chrono::seconds(abortSeconds)) ==
        std::cv_status::no_timeout) {
      LOG(INFO) << "Already finished normally, no abort.";
    } else {
      LOG(INFO) << "Requesting abort.";
      abortTrigger.store(true);
    }
  };
  // we want to run in bg, not block
  static std::future<void> abortThread = std::async(std::launch::async, lambda);
}
示例#2
0
void setAbortChecker(WdtBase &senderOrReceiver) {
  senderOrReceiver.setAbortChecker(setupAbortChecker());
}