У меня есть два счетчика:
#define number_of_ccr 1024
unsigned int lpBuffer[number_of_ccr] = {0};
unsigned long nNumberOfBytesToRead = number_of_ccr*4;
unsigned long lpNumberOfBytesRead;
unsigned int counter = 0;
unsigned int error = 0;
QueryPerformanceCounter(&fullCounter); // first counter
for(;;) {
QueryPerformanceCounter(&startCounter); // second counter
error = ReadFile(
hSerial,
lpBuffer,
nNumberOfBytesToRead,
&lpNumberOfBytesRead,
NULL
);
if(!strcmp(lpBuffer, "end")) {
CloseHandle(FileHandle);
//char *copyString = "copy";
//WriteFile(hSerial, copyString , strlen(copyString), &bytes_written, NULL);
fprintf(stderr, "end flag was received\n");
break;
}
else if(lpNumberOfBytesRead == nNumberOfBytesToRead) {
// NOTE(): succeed
QueryPerformanceCounter(&endCounter);
time += Win32GetSecondsElapsed(startCounter, endCounter); //second counter
DWORD BytesWritten;
// write data to file
WriteFile(FileHandle, lpBuffer, lpNumberOfBytesRead, &BytesWritten, 0);
if(!(lpBuffer[0] % 1024)) {
fprintf(stderr, "bytes %d \r", lpBuffer[0]);// <--- THIS LINE
}
}
else if(lpNumberOfBytesRead < nNumberOfBytesToRead) {
fprintf(stderr, "bytes %d \n", lpNumberOfBytesRead);
}
}// for(;;)
QueryPerformanceCounter(&fullCounterEnd);
fullTime = Win32GetSecondsElapsed(fullCounter, fullCounterEnd);
char DebugBuffer[256];
fprintf(stderr, "time: %f \n", time);
fprintf(stderr, "full time: %f \n", fullTime);
, если я прокомментирую fprintf(stderr, "bytes %d \r", lpBuffer[0]);// <--- THIS LINE
второй счетчик будет примерно таким же временем, как и счетчик кулаков (fullCounter).Когда эта строка не закомментирована, второй таймер почти в два раза меньше первого счетчика.Единственным отличием является наличие этой строки.
В целом: если fprintf
НЕ ЗАМЕЧАНО, мой счетчик показывает ЛУЧШЕ readfile
производительность -> второй счетчик имеет МЕНЬШЕ времени
Если fprintf
КОММЕНТАРИЙ У меня ХОРОШАЯ производительность -> второй счетчик имеет больше времени
флаги компилятора: cl -Z7 -nologo -Fmsource.map ../code/source.c
журнал cmder:
C:\Documents\work\region\testProject\build (master -> origin)
λ source.exe
Opening serial port...OK
Sending bytes...9 bytes written
end flag was received
time: 0.193245
full time: 0.206170
Closing serial port...OK
C:\Documents\work\region\testProject\build (master -> origin)
λ source.exe
Opening serial port...OK
Sending bytes...9 bytes written
end flag was received
time: 0.115640
full time: 0.204010
Closing serial port...OK
Мой вопрос: почему это происходит?Какое влияние это оказывает на мою программу?