0

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

这是代码:

/* 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);

最后一行可以到达吗?

4

2 回答 2

4

看看宏的定义MULTI_CHECK_SIG。我搜索并找到了另一个包含语句MULTI_CHECK_SIG的宏的定义。EVENT_LOOP_CHECK_SIGNALbreak

于 2012-07-18T06:41:59.020 回答
1

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

于 2012-07-18T06:14:48.847 回答