50 lines
1.0 KiB
C++
50 lines
1.0 KiB
C++
#include <csignal>
|
|
#include <pthread.h>
|
|
|
|
#include "common/base/logging/logger.h"
|
|
#include "runtime/include/cmvr_runtime.h"
|
|
|
|
namespace {
|
|
|
|
bool blockShutdownSignals(sigset_t& shutdown_signals)
|
|
{
|
|
sigemptyset(&shutdown_signals);
|
|
sigaddset(&shutdown_signals, SIGINT);
|
|
sigaddset(&shutdown_signals, SIGTERM);
|
|
return pthread_sigmask(SIG_BLOCK, &shutdown_signals, nullptr) == 0;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
int main()
|
|
{
|
|
sigset_t shutdown_signals;
|
|
if (!blockShutdownSignals(shutdown_signals)) {
|
|
return 1;
|
|
}
|
|
|
|
cmvr::Runtime runtime;
|
|
if (!runtime.init()) {
|
|
return 1;
|
|
}
|
|
if (!runtime.startTasks()) {
|
|
return 1;
|
|
}
|
|
|
|
if (auto viewer = runtime.mujocoViewer("mujoco_viewer")) {
|
|
CMVR_LOG(INFO) << "[Startup] Run MuJoCo viewer on main thread";
|
|
viewer->runOnMainThread();
|
|
runtime.shutdown();
|
|
return 0;
|
|
}
|
|
|
|
int received_signal = 0;
|
|
if (sigwait(&shutdown_signals, &received_signal) != 0) {
|
|
runtime.shutdown();
|
|
return 1;
|
|
}
|
|
|
|
runtime.shutdown();
|
|
return 0;
|
|
}
|