当主循环正在侦听消息时,如何在特定时间退出程序

How to exit a program at particuliar time while main loop is listening for message?

本文关键字:退出程序 定时间 消息 循环      更新时间:2023-10-16

在主程序主循环中,我正在通过调用tibemsMsgConsumerReceive来收听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

在开始监听消息的主循环之前,我启动了一个线程。

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