将一个中断循环和其他if循环中断的语句?

时间:2017-11-02 16:08:18

标签: c loops break

我有一个记录USB端口串行数据的线程。当发布信号量并且变量serial_logging_running1时,它将继续执行while(serial_logging_running == 1)循环并不断读取串行端口并写入文件。退出程序时,信号处理程序将变量serial_logging_running设置为0break语句是退出while()循环还是外部if (res == 0)然后继续返回空语句?

static void *logging(void *param) {

    int rdlen, res;
    char ibuf[1024];

    sem_wait(&logging_semaphore); 

    /*Open log file and write to it from /dev/USB1*/
    create_open_log_file();
    res = log_dut_serial_data(serial_port);

    if (res) {
        fprintf(stderr,"Error opening the serial port%s\n",serial_port);
    }

    if (res == 0) {

        while(serial_logging_running == 1) {

            /*read from serial port write to log file*/
            rdlen = read(fd_joule, ibuf, sizeof(ibuf));

            if (rdlen > 0) {
                fwrite(ibuf, sizeof(char), rdlen, log_file);
                fflush(log_file);
            }

            if (rdlen < 0) {
                fprintf(stderr, "rdlen les than 0\r\n");
            }

            /* Exit the serial logging thread*/
            if (serial_logging_running == 0) {
                printf("Exiting serial logging thread\r\n");
                break;
            }


        }
    }

    close_serial_port_joule(); /*Exiting close the serial port*/

    return NULL;

}

3 个答案:

答案 0 :(得分:2)

  

break语句是否会突破while循环和其他if循环?

if块不相关。 break将“跳转”到while () { ... }循环的末尾。

然而在OP的情况下,break将离开if (serial_logging_running == 0) { }并跳转到几乎 if (res == 0) { }的结尾。

if (res == 0) {
    while(serial_logging_running == 1) {
        ...
        if (serial_logging_running == 0) {
            ...
            break;  //  Jump to end of while loop
        }
    }
    // break "lands" here
}
  

break语句是退出while()循环还是外部if (res == 0)然后继续返回空语句?

没有。代码流将首先进入while循环结束。然而,由于if (res == 0)没有更多代码,代码流将完成if()。接下来的代码是close_serial_port_joule();然后 return NULL;

另请注意,此处不需要break@Iharob Al Asimi

答案 1 :(得分:1)

了解关键字SELECT id, code FROM table WHERE (id, delta) IN (SELECT id, MIN(delta) FROM table GROUP BY id); 。它突破了当前最后发起的循环块。 break - 语句不会以任何方式生成循环块。

所以是的,你的程序在if - 语句中突破了while循环,并在此之后正常执行。

答案 2 :(得分:0)

中断会打断while引起的循环。没有循环可以打破如果。所以是的,是&#34;终止&#34;并且程序流向返回NULL -statement。