在主程序主循环中,我通过调用tibemsMsgConsumer_Receive来监听EMS主题。同时,我想在特定时间退出该计划,比如说下午5点。我该如何实现呢?
我尝试使用以下代码,但在没有收到消息的情况下,它无法正常工作。
有什么方法可以在' while'循环卡在那里?
while (1)
{
status = tibemsMsgConsumer_Receive(m_CmbsSpreadMatrixSubscriber, &msg);
if (status == TIBEMS_OK)
{
DoSomething();
}
if (getRunTime("hour").c_str()) >= 18)
{
exit(0);
}
}
答案 0 :(得分:1)
使用tibemsMsgConsumer_ReceiveTimeout()并设置适当的超时以反复检查退出条件。
从该页面上的描述:
此功能使用来自消费者目的地的下一条消息。当目标没有准备好任何消息时,此功能将阻止:
答案 1 :(得分:0)
在开始主循环监听消息之前,我启动一个线程。
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);
}
}
}