USB 포트에서 시리얼 데이터를 기록하는 스레드가 있습니다. 세마포어가 게시되고 변수 serial_logging_running
이 1
이면 while(serial_logging_running == 1)
루프로 진행하고 연속적으로 직렬 포트와 파일을 읽습니다. 프로그램이 종료되면 신호 처리기는 변수 serial_logging_running
을 0
으로 설정합니다. break
문이 while()
루프와 외부 if (res == 0)
을 종료하고 null 문을 반환합니까?휴식 시간이 while 루프와 다른 if 루프에서 중단됩니까?
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;
}
if-loop는 무엇입니까? –
TLDR; 귀하의 접근 방식은 잘못되었습니다. 이것을 묻는 것은 잘못된 알고리즘을 설계했음을 의미합니다. 알고리즘을 다시 생각하고 다시 시도하십시오. 이것은 단지 충고 일 뿐이며, 원하는 모든 종류의 행동을 강제로 시도 할 수는 있지만 올바른 방식으로 수행하는 것이 항상 더 좋습니다. –
if (serial_logging_running == 0)'while (serial_logging_running == 1)'이 다시 루프에 들어 가지 않기 때문에 'break'는 전혀 필요하지 않습니다. –