Как выйти из программы в определенное время, пока основной цикл прослушивает сообщение?

В основном цикле основной программы я слушаю тему 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);
}
}

1

Решение

использование tibemsMsgConsumer_ReceiveTimeout () и установите соответствующий тайм-аут, чтобы повторно проверить состояние выхода.

Из описания на этой странице:

Эта функция использует следующее сообщение от получателя. Когда у получателя нет готовых сообщений, эта функция блокирует:

  • Если сообщение прибывает в пункт назначения, этот вызов немедленно использует это сообщение и возвращается.
  • Если (ненулевой) тайм-аут истекает до прибытия сообщения, этот вызов возвращает TIBEMS_TIMEOUT.
  • Если другой поток закрывает потребителя, этот вызов возвращает TIBEMS_INTR.
1

Другие решения

перед началом прослушивания основного цикла я запускаю поток.

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

По вопросам рекламы [email protected]