当主循环正在侦听消息时,如何在特定时间退出程序
How to exit a program at particuliar time while main loop is listening for message?
在主程序主循环中,我正在通过调用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);
}
}
}
相关文章:
- 为什么异常不退出程序?
- 虽然循环在使用回车键时不退出程序
- 降低程序的时间复杂度
- 如果 I/O read() 处于阻塞阶段,如何使用 Ctrl+C 退出 C++ 程序?
- 捕获异常后如何退出程序执行
- 在C++中使用exit()退出程序有问题吗
- 从函数打印 CLI 帮助消息后,我应该如何干净地退出 C++ 程序?
- 为什么 C++ openMP 程序执行时间更长
- 如何实现否定用户输入退出程序和打印列表?
- 我怎样才能阻止我的程序输出时间,它使我的程序难以阅读
- 提高驱动程序程序的时间效率
- gdb 退出:程序接收信号 SIGILL,使用 gcc / intel_mkl / gfortran -mavx 编译的
- 有没有办法降低程序的时间复杂度?
- 如何修复数据库连接的C 程序运行时间错误(0xc0000005)
- 试图调节我的 do-while 以停止在终端中退出程序.菜单不会根据需要循环使用当前语句
- 如何在C 中按ENTER/返回键时退出程序循环
- 退出程序,默认开关
- 我想让程序保持运行,直到用户输入 n 退出程序
- 程序的时间复杂性确定两个字符串是否彼此排列
- 当主循环正在侦听消息时,如何在特定时间退出程序