2012-07-18 91 views
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); 

是最後一行到達?

+0

您是否嘗試在某些縮進處使用匹配圓括號縮進內部代碼塊? – 2012-07-18 06:09:58

+0

你試着去了解什麼?調試? – 2012-07-18 06:10:55

+2

我看到'while(true)'而不是單個'break'或'return'語句... – Mysticial 2012-07-18 06:11:30

回答

4

看看宏的定義MULTI_CHECK_SIG。我搜索了MULTI_CHECK_SIG,並找到了一個含有break聲明的另一個宏EVENT_LOOP_CHECK_SIGNAL的定義。

+0

哈,我的想法完全一樣 - MULTI_CHECK_SIG裏面必須有'break',因爲它看起來像是宏。許多軟件開發人員經常用大寫字母來編寫宏。 – 2012-07-18 07:47:48

1

循環看起來像沒有結局。嵌入式系統編程通常是這種情況。然後通過斷開電源簡單地結束環路。硬件不能停止工作,所以總會有一個沒有結束條件的循環。 在Linux(和其他操作系統)中,您也可以通過實現IPC信號功能來終止程序。

相關問題