什么时候结束?

时间:2012-07-18 06:08:02

标签: c++ while-loop

如果代码的任何部分导致退出循环而不退出整个程序,则无法理解代码。

以下是代码:

/* per-packet event loop */
while (true)
{
  perf_push (PERF_EVENT_LOOP);

  /* wait on tun/socket list */
  multi_get_timeout (&multi, &multi.top.c2.timeval);
  status = multi_tcp_wait (&multi.top, multi.mtcp);
  MULTI_CHECK_SIG (&multi);

  /* check on status of coarse timers */
  multi_process_per_second_timers (&multi);

  /* timeout? */
  if (status > 0)
  {
    /* process the I/O which triggered select */
    multi_tcp_process_io (&multi);
    MULTI_CHECK_SIG (&multi);
  }
  else if (status == 0)
  {
    multi_tcp_action (&multi, NULL, TA_TIMEOUT, false);
  }

  perf_pop ();
}
  /* shut down management interface */
 uninit_management_callback_multi (&multi);

最后一行是否可以访问?

2 个答案:

答案 0 :(得分:4)

查看宏MULTI_CHECK_SIG的定义。我用Google搜索了MULTI_CHECK_SIG,并根据包含EVENT_LOOP_CHECK_SIGNAL语句的另一个宏break找到了一个定义。

答案 1 :(得分:1)

循环看起来没有结局。这通常是嵌入式系统编程的情况。然后通过断开电源简单地结束循环。硬件无法停止工作,因此总会有一个没有结束条件的循环。 在Linux(和其他操作系统)中,您还可以通过实现IPC信号功能来终止程序。