В основном цикле основной программы я слушаю тему EMS, вызывая tibemsMsgConsumer_Receive. Между тем, я хочу выйти из программы в определенное время, скажем, 5 вечера. Как я могу это реализовать?
Я попытался использовать следующий код, но он не работает должным образом, если сообщение не получено.
Есть ли способ выйти из программы, когда цикл «там» застрял там?
while (1)
{
status = tibemsMsgConsumer_Receive(m_CmbsSpreadMatrixSubscriber, &msg);
if (status == TIBEMS_OK)
{
DoSomething();
}
if (getRunTime("hour").c_str()) >= 18)
{
exit(0);
}
}
использование tibemsMsgConsumer_ReceiveTimeout () и установите соответствующий тайм-аут, чтобы повторно проверить состояние выхода.
Из описания на этой странице:
Эта функция использует следующее сообщение от получателя. Когда у получателя нет готовых сообщений, эта функция блокирует:
перед началом прослушивания основного цикла я запускаю поток.
boost::thread aThread(&threadFunc);
а в функции потока я просто считаю время и выхожу из программы. Не уверен если
это безопасно и правильно или нет …
void threadFunc()
{
while (true)
{
wait(60);
if (atoi(getRunTime("hour").c_str()) >= 18)
{
Log("Now it's 6PM, let's stop and get back tomorrow.");
exit(0);
}
}
}