如果代码的任何部分导致退出循环而不退出整个程序,则无法理解代码。
以下是代码:
/* 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);
最后一行是否可以访问?
答案 0 :(得分:4)
查看宏MULTI_CHECK_SIG
的定义。我用Google搜索了MULTI_CHECK_SIG
,并根据包含EVENT_LOOP_CHECK_SIGNAL
语句的另一个宏break
找到了一个定义。
答案 1 :(得分:1)
循环看起来没有结局。这通常是嵌入式系统编程的情况。然后通过断开电源简单地结束循环。硬件无法停止工作,因此总会有一个没有结束条件的循环。 在Linux(和其他操作系统)中,您还可以通过实现IPC信号功能来终止程序。