在主程序主循环中,我正在通过调用 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);
}
}
使用tibemsMsgConsumer_ReceiveTimeout()并设置适当的超时以反复检查您的退出条件。
根据该页面的描述:
此函数使用来自消费者目的地的下一条消息。当目的地没有准备好任何消息时,此函数将阻止:
- 如果消息到达目的地,此调用会立即使用该消息并返回。
- 如果(非零)超时在消息到达之前过去,则此调用返回 TIBEMS_TIMEOUT。
- 如果另一个线程关闭消费者,则此调用返回 TIBEMS_INTR。
我是一名优秀的程序员,十分优秀!